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

17194754" target="_blank">

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. atitit.集合的filt操作细分 filter总结

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

  3. Atitit usbQb212 oo 面向对象封装的标准化与规范解决方案java c# php js

    Atitit usbQb212 oo 面向对象封装的标准化与规范解决方案java c# php js 1.1. 封装性是面象对象编程中的三大特性之一  三个基本的特性:封装.继承与多态1 1.2. 魔 ...

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

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

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

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

  6. Atitit 数据库视图与表的wrap与层级查询规范

    Atitit 数据库视图与表的wrap与层级查询规范 1.1. Join层..连接各个表,以及显示各个底层字段1 1.2. 统计层1 1.3. 格式化层1 1.1. Join层..连接各个表,以及显示 ...

  7. Linq查询datatable的记录集合

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

  8. atitit.人脸识别的应用场景and使用最佳实践 java .net php

    atitit.人脸识别的应用场景and使用最佳实践 java .net php 1. 人脸识别的应用场景 1 2. 框架选型 JNI2OpenCV.dll and JavaCV 1 3. Url ap ...

  9. Linq 查询 List集合

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

随机推荐

  1. SQL server 上机练习题

    首先创建一个数据库,里面有 登录表 学生表   课程表   选课表 成绩表 1. 查询Student表中的所有记录的Sname.Ssex和Class列.2. 查询教师所有的单位即不重复的Depart列 ...

  2. spark查看stage和tasks信息

    spark提供了web-ui接口.外部命令等多种方法监视spark程序的执行状态.利用spark的监视功能,可以方便的查看spark应用程序执行的状态,具体包括:1)stage和tasks列表信息  ...

  3. 【译】x86程序员手册28-7.7任务地址空间

    7.7 Task Address Space 任务地址空间 The LDT selector and PDBR fields of the TSS give software systems desi ...

  4. PHP fSQL Tutorial

    PHP fSQL Tutorial This tutorial is designed to give a brief overview of the PHP fSQL API since versi ...

  5. HDU_1022_Train Problem I

    Train Problem I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  6. Linux下ifconfig不显示ip地址问题总结

    问题一:ifconfig之后只显示lo,没有看到eth0 ? eth0设置不正确,导致无法正常启动,修改eth0配置文件就好 ubuntu 12.04的网络设置文件是/etc/network/inte ...

  7. PHP 浏览器端输出中文正常,cmd中文乱码

    cmd 运行php脚本乱码问题如果别的编码根据下面的自己换吧!chcp 65001 就是换成UTF-8chcp 936 可以换回默认的GBKchcp 437 是美国英语

  8. java中随机生成字符串的方法(三种)

    org.apache.commons.lang(2.6): 链接:https://pan.baidu.com/s/1k_oeA5AjSt6evoR7zT8gpQ 提取码:yhl5 1.生成的字符串每个 ...

  9. BLOCK层基本概念:bio,request,request_queue

    Summary bio 代表一个IO 请求 request 是bio 提交给IO调度器产生的数据,一个request 中放着顺序排列的bio 当设备提交bio 给IO调度器时,IO调度器可能会插入bi ...

  10. C: 字符数组中的空去掉

    #include <stdio.h> #include <string.h> int main() { char a[50] = "nearby! "; i ...