atitit. 集合groupby 的实现(2)---自己定义linq查询--java .net php
atitit. 集合groupby 的实现(2)---自己定义linq查询--java .net php
实现方式有例如以下
5. Groupby分组方法 code----groupBy() 4
做报表统计啊。有个大问题。。
有人整过集合的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的更多相关文章
- atitit. 集合groupby 的实现(2)---自定义linq查询--java .net php
atitit. 集合groupby 的实现(2)---自定义linq查询--java .net php 实现方式有如下 1. Linq的实现原理流程(ati总结) 1 2. groupby 与 事 ...
- atitit.集合的filt操作细分 filter总结
atitit.集合的filt操作细分 filter总结 1. Css sltr 1 2. 基本选择器(根据id,class,元素名) 2 3. 层次选择器 3 4. 过滤选择器 3 5. First, ...
- Atitit usbQb212 oo 面向对象封装的标准化与规范解决方案java c# php js
Atitit usbQb212 oo 面向对象封装的标准化与规范解决方案java c# php js 1.1. 封装性是面象对象编程中的三大特性之一 三个基本的特性:封装.继承与多态1 1.2. 魔 ...
- LINQ查询操作符之Select、Where、OrderBy、OrderByDescending、GroupBy、Join、GroupJoin及其对应的查询语法
介绍 ·Select - Select选择:延迟 ·Where - Where查询:延迟 ·OrderBy - 按指定表达式对集合正序排序:延迟 ·OrderByDescend ...
- C#高级知识点概要(3) - 特性、自动属性、对象集合初始化器、扩展方法、Lambda表达式和Linq查询
1.特性(Attributes) 特性(Attributes),MSDN的定义是:公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型.字段.方法 ...
- Atitit 数据库视图与表的wrap与层级查询规范
Atitit 数据库视图与表的wrap与层级查询规范 1.1. Join层..连接各个表,以及显示各个底层字段1 1.2. 统计层1 1.3. 格式化层1 1.1. Join层..连接各个表,以及显示 ...
- Linq查询datatable的记录集合
通过linq查询datatable数据集合满足条件的数据集 1.首先定义查询字段的变量,比方深度 string strDepth=查询深度的值: var dataRows = from datarow ...
- atitit.人脸识别的应用场景and使用最佳实践 java .net php
atitit.人脸识别的应用场景and使用最佳实践 java .net php 1. 人脸识别的应用场景 1 2. 框架选型 JNI2OpenCV.dll and JavaCV 1 3. Url ap ...
- Linq 查询 List集合
总是听到身边的同事说起Linq ,知道上学的时候学过,可是自从毕业之后就再也没用过,总觉得是很牛的技能 ,可是当自己真正学会用的时候才发现,我去,So easy .废话不多说直接上代码吧 var li ...
随机推荐
- android中用Intent传数据,如果用传递的是一个类,就将类实现Parcelable接口
Parcelable,内存单位,跨进程使用,或者intent传递对象的时候使用.android中用Intent传数据,如果用传递的是一个对象,就将对象实现Parcelable接口,而不是将对象序列化. ...
- [Windows Server 2012] 更换PHP版本方法
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com ★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频. ★ 本节我们将带领大家:更换PHP ...
- 已集成 VirtIO驱动windows server 2012, 2008, 2003的ISO镜像下载
已集成 VirtIO驱动简体中文windows server 2012, 2008, 2003系统ISO镜像下载地址. 适用于上传自定义ISO并且使用 VirtIO驱动的kvm架构vps,vultr家 ...
- Context Switches msdn
Context Switches https://msdn.microsoft.com/en-us/library/ms682105(VS.85).aspx The scheduler mainta ...
- CAD使用SetxDataDouble写数据(网页版)
主要用到函数说明: MxDrawEntity::SetxDataDouble 写一个Double扩展数据,详细说明如下: 参数 说明 [in] BSTR val 字符串值 szAppName 扩展数据 ...
- 梦想MxWeb3D协同设计平台 2019.01.24更新
SDK开发包下载地址:http://www.mxdraw.com/ndetail_10124.html1. 编写快速入门教程2. 重构前端代码,支持一个页面多个三维控件同时加载,或二维和三维同时加 ...
- JavaScipt30(第三个案例)(主要知识点:css变量)
承接上文 https://www.cnblogs.com/wangxi01/p/10641210.html,下面是第三个案例: 附上项目链接: https://github.com/wesbos/Ja ...
- 02C语言基本语法
C语言基本语法 注释 //行注释 /* 块注释*/ 标识符 标识符是用来标识变量.函数.任何其他用户自定义项目的名称:一个标识符以字母 A-Z 或 a-z 或下划线 _ 开始,后跟零个或多个字母.下划 ...
- No value specified for parameter1?
我使用的是jdbcTemplate,因为忘记向list中加入参数,所以报错. 解决方案,: String sql = "select * from table where id = ?&qu ...
- SQL Server数据库基础编程
转载,查看原文 Ø Go批处理语句 用于同时执行多个语句 Ø 使用.切换数据库 use master go Ø 创建.删除数据库 方法1. --判断是否存在该数据库,存在就删除 if (exist ...