atitit. groupby linq的实现(1)-----linq框架选型 java .net php
实现方式有如下
做报表统计啊,有个大问题。。有人整过集合的groupby查询汇总(Sum)没有哟??已经使用了linq4j,quaere,josql,,ms 对Map字典不起作用。。
1. Dsl/ Java8 Streams AP ,对象化的查询api ,推荐
persons1.GroupBy(a => a.Name).Select(g => (new { name = g.Key, count
优点是。。类型安全的查询,并且能使用智能提示功能!
2. Linq::: like sql 的dsl
1.1. linq4j (jdk6 ok,jdk7 编译错误,又马jar下载)
linq4j d fun0 ,fun1 ,fun2 也不是好的dsl..
作者::老哇的爪子Attilax艾龙,EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/attilax
1.2. Quaere:Java上的LINQ(新不上sourcecode)
下例从一个从产品列表中得到产品名称的列表:
List products = Arrays.asList(Product.getAllProducts());
Iterable productNames = from("p").in(products). select("p.getProductName()");
1.3. 也是与Quaere类似的API
这个到是有jar下载了...好像不支持list(map),only list(bean)
Caused by: java.lang.IllegalArgumentException: Cannot find method with name: url in class: java.util.Map
1.4. 。net linq
语句描述:Linq使用Group By和Count得到每个CategoryID中产品的数量。
说明:先按CategoryID归类,取出CategoryID值和各个分类产品的数量。
1.计数
1 var q =
2 from p in db.Products
3 group p by p.CategoryID into g
4 select new {
5 g.Key,
6 NumProducts = g.Count()
7 };
3. Sql 解析
缺点是不能使用使用ide智能提示
4. Lambda
5. 嘎自实现
1.5. linq4j code
Linq4j.asEnumerable(emps)
.groupBy(
EMP_DEPTNO_SELECTOR, new Function0<String>() {
public String apply() {
return null;
}
}, new Function2<String, Employee, String>() {
public String apply(String v1, Employee e0) {
return v1 == null ? e0.name : (v1 + "+" + e0.name);
}
}, new Function2<Integer, String, String>() {
public String apply(Integer v1, String v2) {
return v1 + ": " + v2;
}
})
.orderBy(Functions.<String>identitySelector())
.toList()
.toString();
6. apache collections4 (不行,马行上groupby)
7. 林吧:::自己DSL来自stream api jdk8 相像
8. Stream api n linq的不同
Stream 是基于lambda的dsl , 语法不跟个sql雅十...这个更灵活...
Linq,雅十dsl,走十语法跟个sql雅十..linq更容易的...
9. 参考
如何将常见的LINQ表达式转换为Java 8 Streams API表达式.
Linq使用Group By经验总结 - 51CTO.COM.htm
Java8如何进行stream,reduce,collection操作 - 51CTO.COM.htm