atitit.  集合groupby 的实现(2)---自定义linq查询--java .net php

实现方式有如下

1. Linq的实现原理流程(ati总结) 1

2. groupby  与 事先排序 2

3. #----------聚合函数 2

4. 自定义linq查询Linq .from(li) .groupBy("url","user" ) .select("url", count().as("countx"), avg("len").as("avgx")); avg("len").as("avgx")); 3

5. Groupby分组方法 code----groupBy() 4

6. 实现聚合操作select() 5

7. Count,sum()的实现 7

8. 参考 7

做报表统计啊,有个大问题。。有人整过集合的groupby查询汇总(Sum)没有哟??已经使用了linq4j,quaere,josql,,ms 对Map字典不起作用。。

1. Linq的实现原理流程(ati总结)

所有的统计函数都是对查询出的每一行数据进行分类以后再进行统计计算。所以在结果集合中,对所进行分类的列的每一种数据都有一行统计结果值与之对应。

聚合结果是针对每一个分组,而不是整个表

从技术上来说,可以使用不带任何聚合函数的GROUP BY子句,但这样的语句可能毫无意义。要将所有行分组, 必须要对所有的行执行操作,

Process pic as flow..(PDA pic)

grpBy()

Union>>>grpTAb1>>> sum() .leftjoin( count()) .leftjoin (avg());

Union>>>grpTAb22  >>sum() .leftjoin( count()) .leftjoin (avg());

Filter Outpu();

作者::老哇的爪子Attilax艾龙,EMAIL:1466519819@qq.com

转载请注明来源:http://blog.csdn.net/attilax

2.  groupby  与 事先排序

一些程序的groupby  操作 api需要数据事先排序..而实际上,这个不是必须的..

Excel的groupby就要事先排序的

3. #----------聚合函数

聚合函数分为两类,,,,单行函数和多行函数。多行函数也叫聚合函数、组合函数。
 ,聚合函数的参数为数组

在java8 JDK包含许多聚合操作(如平均值,总和,最小,最大,和计数),返回一个计算流stream的聚合结果。这些聚合操作被称为聚合操作。JDK除返回单个 值的聚合操作外,还有很多聚合操作返回一个collection集合实例。很多的reduce操作执行特定的任务,如求平均值或按类别分组元素。

#-----------通用的聚合操作:Stream.reduce,Stream.collection

JDK提供的通用的聚合操作:Stream.reduce,Stream.collection

注意:本文将reduction operations翻译为聚合操作,因为reduction operations通常用于汇聚统计。

两者的区别:

Stream.reduce,常用的方法有average, sum, min, max, and count,返回单个的结果值,并且reduce操作每处理一个元素总是创建一个新值

Stream.collection与stream.reduce方法不同,Stream.collect修改现存的值,而不是每处理一个元素,创建一个新值

#--------特定用途的汇聚操作

Stream接口有一些通用的汇聚操作,比如reduce()和collect();也有一些特定用途的汇聚操作,比如sum(),max()和count()

4. 自定义linq查询Linq .from(li) .groupBy("url","user" ) .select("url", count().as("countx"), avg("len").as("avgx")); avg("len").as("avgx"));

public static void main(String[] args) { // throws QueryParseException,

// QueryExecutionException {

// attilax 老哇的爪子 0_52_g o8d

List li = new ArrayList<Map>() {

{

this.add(new HashMap() {

{

put("url", "url1");

put("user", "u1");

put("len", 1);

}

});

this.add(new HashMap() {

{

put("url", "url1");

put("len", 9);

put("user", "u2");

}

});

this.add(new HashMap() {

{

put("url", "url2");

put("len", 5);

put("user", "u1");

}

});

}

};

List li2 = Linq

.from(li)

.groupBy("url","user" )

.select("url",  count().as("countx"),

avg("len").as("avgx"));

core.print_wzFmt(li2);

结果:::

[

{

"avgx": null,

"countx": 1,

"url": "url1"

},

{

"avgx": null,

"countx": 1,

"url": "url1"

},

{

"avgx": null,

"countx": 1,

"url": "url2"

}

]

5. Groupby分组方法 code----groupBy()

public Linq groupBy(final String... fld) {

// attilax 老哇的爪子 l_39_39 o8d

this.grpby_flds = fld;

CollectionUtils.each(this.li, new Closure<Map, Object>() {

@Override

public Object execute(Map m) throws Exception {

// attilax 老哇的爪子 m_4_41 o8d

Val v = Mapx.$(m).get(fld);

// if(createGrp(m.get(fld)))

String key = v.toString();

if (grpbyRztLi_MpFmt.get(key) == null)

grpbyRztLi_MpFmt.put(key, new GroupTable());

GroupTable gt = grpbyRztLi_MpFmt.get(key);

gt.grpby_fld = fld;

gt.key = v;

gt.add(m);

return null;

}

});

return this;

}

6. 实现聚合操作select()

public List select(final Object... slktObj) {

// attilax 老哇的爪子 l_46_a o8d

// list union

List lix = CollectionUtils.each_RE(grpbyRztLi_MpFmt,

new Closure<Entry<Object, GroupTable>, Object>() {

@Override

public Object execute(Entry<Object, GroupTable> e)

throws Exception {

// attilax 老哇的爪子 0_e_47 o8e

List<Map> singTab = e.getValue().li;

List<reduceCalcRzt_singleExprs> li = new ArrayList<>();

for (Object o : slktObj) {

if (o instanceof Iredus) {

Iredus ci = (Iredus) o;

reduceCalcRzt_singleExprs rzt_se = ci

.exec(singTab);

li.add(rzt_se);

filtOutputFlds.add(ci.getOutputColname());

} else {

filtOutputFlds.add(o.toString());

}

}

reduceCalcRecord rcr = redusUtil.leftjoin(li);

rcr.map.putAll(singTab.get(0));

return rcr.map;

}

});

//filt  fld to output

List li2 = CollectionUtils.each_NS(lix, new Closure<Map, Map>() {

@Override

public Map execute(Map arg0) throws Exception {

// attilax 老哇的爪子 12:29:50 AM Aug 17, 2014

final Map m = new HashMap();

CollectionUtils.each_RE(arg0, new Closure<Entry, Object>() {

@Override

public Object execute(Entry e) throws Exception {

// attilax 老哇的爪子 12:33:21 AM Aug 17, 2014

String k = e.getKey().toString();

if (filtOutputFlds.contains(k))

m.put(k, e.getValue());

return null;

}

});

return m;

}

});

return li2;

}

7. Count,sum()的实现

public class countImp

@Override

public reduceCalcRzt_singleExprs exec(final List GroupTable ) {

// attilax 老哇的爪子  10:16:21 PM   Aug 16, 2014

reduceCalcRzt_singleExprs o=new reduceCalcRzt_singleExprs();

o.map=new HashMap(){

{

put(colName,GroupTable.size());

}

};

{

return o;

}

}

8. 参考

Java8如何进行stream,reduce,collection操作 - 51CTO.COM.htm

Java并没没落:最新Java 8简明教程译文(3) - 51CTO.COM.htm

atitit. 集合groupby 的实现(2)---自定义linq查询--java .net php相关推荐

  1. atitit.跨架构 bs cs解决方案. 自定义web服务器的实现方案 java .net jetty  HttpListener...

    atitit.跨架构 bs cs解决方案. 自定义web服务器的实现方案 java .net jetty  HttpListener 1. 自定义web服务器的实现方案,基于原始socket vs   ...

  2. Linq查询datatable的记录集合

    通过linq查询datatable数据集合满足条件的数据集 1.首先定义查询字段的变量,比方深度 string strDepth=查询深度的值: var dataRows = from datarow ...

  3. atitit.集合的filt操作细分 filter总结

    atitit.集合的filt操作细分 filter总结 1. Css sltr 1 2. 基本选择器(根据id,class,元素名) 2 3. 层次选择器 3 4. 过滤选择器 3 5. First, ...

  4. Revit二次开发之使用LINQ查询元素过滤集合里的元素【比目鱼原创】

    =========[更多高级应用请关注公众号]======== =================================== 元素过滤器的使用方式: FilteredElementColle ...

  5. [深入学习C#]LINQ查询表达式详解(1)——基本语法、使用扩展方法和Lambda表达式简化LINQ查询

    此文章非原创,转载自诗人江湖老,原文地址 在Git上下载源码 在工程中我们少不了要定义类或者结构去储存数据,这些数据将被临时地储存在内存中,现在我们想要对其完成一些类似于查找.过滤等等常见的任务的时候 ...

  6. LINQ之路 5:LINQ查询表达式

    书写LINQ查询时又两种语法可供选择:方法语法(Fluent Syntax)和查询表达式(Query Expression). LINQ方法语法的本质是通过扩展方法和Lambda表达式来创建查询.C# ...

  7. linq查询不包含某个值的记录_【翻译】C#表达式中的动态查询

    当您使用LINQ来处理数据库时,这种体验是一种神奇的体验,对吗?你把数据库实体像一个普通的收集,使用Linq中像Where,Select或者 Take,这些简单的使用就能让代码可用了. 但是,让我们考 ...

  8. [深入学习C#]LINQ查询表达式详解(2)——查询表达式的转换

    转载自诗人江湖老,原文地址 C#在执行LINQ查询表达式的时候,并不会指定其执行语义,而是将查询表达式转换为遵循查询表达式模式的方法的调用.具体而言,查询表达式将转换为以下名称的调用:Where.Se ...

  9. LINQ的Java等效项是什么? [关闭]

    LINQ的Java等效项是什么? #1楼 听起来每个人都在谈论的Linq只是LinqToObjects. 我认为,这些功能仅提供了Java现在已经可以完成的功能,但是语法却非常丑陋. 我看到的.net ...

  10. 「C#」LinQ查询表达式

    关于LinQ查询表达式 语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称. LINQ 通过提供处理各种数据源和数据格式的数据的一致模型,简化了每种数据源或数据格式再查询时 ...

最新文章

  1. oracle函数,oracle编写函数
  2. C语言指针作为函数返回值
  3. 在C#中使用SQLite
  4. Vue+ECharts的小示例
  5. 第一节 Memcached分布式缓存入门
  6. .net core razor ajax,.NET CORE Razor Pages Ajax 调用 C# 方法
  7. 【Elasticsearch】ES 5.6.4源码解析---translog
  8. 新增字段属性“是否转义”,提高列表展示性能
  9. [物理学与PDEs]第5章第3节 守恒定律, 应力张量
  10. 无约而来WIN8 PRO WMC X64 201306
  11. idea在mac版怎么配置svn_Mac安装svn客户端
  12. 《Arduino》开发 之 用 u8g2 库 给 0.96寸OLED 刷bmp图片,OLED图片取模
  13. 微信v3版本-native支付和支付宝支付接口对接
  14. 来自和府捞面的信任,一起见证「客户的成功就是璞华的成功」
  15. 7-15 福到了 c语言,7-54 福到了 (15 分)
  16. 旺旺文件上传服务器在哪,手机旺旺服务器在哪里设置
  17. Excel基础—Office2019安装
  18. matplotlib之网格线
  19. Oracle 字典表
  20. 生活无大事,生活无小事,需用心经营才行

热门文章

  1. 5G信道编码技术取得新突破,极化码同时满足ITU三大应用需求
  2. html5 localStorage
  3. ***利用高考传播*** 考生上网谨防中毒
  4. 今天,是我的新生吗?
  5. MySQL-快速入门(12)备份、还原
  6. Js参数RSA加密传输,jsencrypt.js的使用
  7. 数据库更新DATE类型的时间
  8. leetcode 730 Count Different Palindromic Subsequences
  9. CodeForces 453A Little Pony and Expected Maximum
  10. readonly strong nonatomic 和IBOutlet