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");

);

}

});

this.add(new HashMap() {

{

put("url", "url1");

);

put("user", "u2");

}

});

this.add(new HashMap() {

{

put("url", "url2");

);

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);

));

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. 集合groupby 的实现(2)---自己定义linq查询--java .net php

    atitit.  集合groupby 的实现(2)---自己定义linq查询--java .net php 实现方式有例如以下 1. Linq的实现原理流程(ati总结) 1 2. groupby   ...

  2. [LINQ]查询关键字

    摘自https://msdn.microsoft.com/zh-cn/library/bb310804.aspx,方便以后翻阅. from子句 查询表达式必须以 from 子句开头.另外,查询表达式还 ...

  3. 2.3 LINQ查询表达式中 使用select子句 指定目标数据

    本篇讲解LINQ查询的三种形式: 查询对象 自定义查询对象某个属性 查询匿名类型结果 [1.查询结果返回集合元素] 在LINQ查询中,select子句和from子句都是必备子句.LINQ查询表达式必须 ...

  4. LINQ查询操作符之Select、Where、OrderBy、OrderByDescending、GroupBy、Join、GroupJoin及其对应的查询语法

    介绍    ·Select - Select选择:延迟    ·Where - Where查询:延迟    ·OrderBy - 按指定表达式对集合正序排序:延迟    ·OrderByDescend ...

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

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

  6. C#高级知识点概要(3) - 特性、自动属性、对象集合初始化器、扩展方法、Lambda表达式和Linq查询

    1.特性(Attributes) 特性(Attributes),MSDN的定义是:公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型.字段.方法 ...

  7. [转载]EF或LINQ 查询时使用IN并且根据列表自定义排序方法

    原文地址:EF或LINQ 查询时使用IN并且根据列表自定义排序方法作者:李明川 EF和LINQ改变了原有的手写SQL时期的一些编码方法,并且增强了各数据库之间的移植性简化了开发时的代码量和难度,由于很 ...

  8. Linq 查询 List集合

    总是听到身边的同事说起Linq ,知道上学的时候学过,可是自从毕业之后就再也没用过,总觉得是很牛的技能 ,可是当自己真正学会用的时候才发现,我去,So easy .废话不多说直接上代码吧 var li ...

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

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

随机推荐

  1. struts标签,<s:textfield>嵌套<s:property>的问题

    错误:org.apache.jasper.JasperException: /front/orderList.jsp(110,122) equal symbol expected   <s:te ...

  2. vsftpd基于pam_mysql的虚拟用户机制

    何为vsftpd? vsftpd:very secure ftp daemon 程序:/usr/sbin/vsftpd 配置文件:/etc/vsftpd/vsftpd.conf 其用户分为:匿名用户( ...

  3. java文件乱码

    要让一个 Java 源文件打开时编码格式为 UTF-8,需要做2件事情:1)设置Java 源文件的默认编码格式为UTF-8:2)设置workspace的编码格式为UTF-8. 相应设置如下: 设置 J ...

  4. dom相关指令

    1.ng-show  和 ng-hide 当ng-show=''true''的时候 dom会显示,反之隐藏,通过控制display属性 2.ng-if 当ng-if=“true” 的时候,dom显示, ...

  5. [R] 回归拟合

    如下示例 > fit <- lm(y~x, data = data01) > summary(fit) Call: lm(formula = data01$P ~ data01$M, ...

  6. 本地调试webapi

    1.新建iis站点,路径关联到代码站点下D:\work\易解科技\程序源码\YQJ\trunk\YQJOpenAPI\YQJOpenAPI 2.vs以管理员身份启动 3.附加到进程 w3wp.exe ...

  7. nginx apache负载均衡测试

    apache配置 (监听内网ip和端口) Listen 10.163.170.8:8001 Listen 10.163.170.8:8002 Listen 10.163.170.8:8003 < ...

  8. freeCodeCamp:Title Case a Sentence

    确保字符串的每个单词首字母都大写,其余部分小写. 像'the'和'of'这样的连接符同理. /*思路 将字符串转为小写.toLowerCase() 分割字符串以单词形式组成数组myarr 确保数组中的 ...

  9. ubuntu下非本账户的.profile文件的修改

    今天不小心在账户了修改了自己的.profile文件,导致重启之后账户无法进入,点登陆账户后黑屏后就重新回到账户登陆界面.一番折腾之后终于成功修改了原账户中的.profile文件,成功从新进入了原账户. ...

  10. 1334: [Baltic2008]Elect

    Description N个政党要组成一个联合内阁,每个党都有自己的席位数. 现在希望你找出一种方案,你选中的党的席位数要大于总数的一半,并且联合内阁的席位数越多越好. 对于一个联合内阁,如果某个政党 ...