Java8自定义条件让集合分组
/**
* 将一个指定类型对象的集合按照自定义的一个操作分组; 每组对应一个List、最终返回结果类型是:List<List<T>>
*
* @param <T>
*/
static class GroupToList<T> implements Collector<T, List<List<T>>, List<List<T>>> {
/**
* 集合中对象两两比较,满足自定义的条件(operation结果返回true),便将这两个元素分为一组
*/
private BiFunction<T, T, Boolean> operation; public GroupToList(BiFunction<T, T, Boolean> operation) {
super();
this.operation = operation;
} @Override
public BiConsumer<List<List<T>>, T> accumulator() {
return (c, t) -> {
boolean added = false;
for (List<T> cc : c) {
for (T ccc : cc) {
if (operation.apply(ccc, t)){
cc.add(t);
added = true;
}
break;
}
if (added)
break;
continue;
}
if (!added) {
ArrayList<T> list = new ArrayList<T>();
list.add(t);
c.add(list);
}
};
} @Override
public Set<java.util.stream.Collector.Characteristics> characteristics() {
/*
Set<java.util.stream.Collector.Characteristics> emptySet = Collections.emptySet();
*/
return Collections.unmodifiableSet(EnumSet.of(Characteristics.IDENTITY_FINISH));
} @Override
public BinaryOperator<List<List<T>>> combiner() {
return (l1,l2) -> {l2.addAll(l1); return l2;};
} @Override
public Function<List<List<T>>, List<List<T>>> finisher() {
return p -> p;
} @Override
public Supplier<List<List<T>>> supplier() {
return () -> new ArrayList<List<T>>();
}
}
Java8自定义条件让集合分组的更多相关文章
- java8 按条件过滤集合
//黄色部分为过滤条件list.stream().filter(user-> user.getId() > 5 && "1组".equals(user. ...
- JAVA 集合 按照某个字段(依据一定条件)进行分组
由于数据不能够在本地化实现, 无法通过sql语句得到对应的结果,小编只好在业务层处理.通过调用接口得到集合,拿到集合后,通过年来分组,以此来达到对应的Map集合... 在这里小编给大家提供一个封装了一 ...
- java通过Stream对list集合分组
java通过Stream对list集合分组 现在有一个List集合,想对该集合中的数据分组处理,想到java8中的stream,就搞来试试,非常给力!例子如下 1 2 3 4 5 6 7 8 9 10 ...
- linq 根据指定条件返回集合中不重复的元素
原理:先查询出数据,根据指定值分组,然后取第一条映射 1.第一种方法 string sql = string.Format("select*from PoliceLogistcs); db. ...
- Java8 新特性之集合操作Stream
Java8 新特性之集合操作Stream Stream简介 Java 8引入了全新的Stream API.这里的Stream和I/O流不同,它更像具有Iterable的集合类,但行为和集合类又有所不同 ...
- asp.net mvc Route 使用自定义条件(constraints)禁止某ip登陆
asp.net mvc Route 使用自定义条件(constraints)禁止某ip登陆 前言 本文的目的是利用Mvc route创建一个自定义约束来控制路由跳转实现禁止ip登陆,当然例子可能不合理 ...
- java8 按两个属性分组,并返回扁平List; stream排序
--------------- java8 按两个属性分组,并返回扁平List /** * 设置大区小区分组排序 * @param dtoList */ private List<Perform ...
- List集合分组实现教程
封装一个方法,用一个Map来实现,这里是根据bean类的seq字段进行拆分的,分成好几个list private LinkedHashMap<String,List<HandleInfo& ...
- C#月份和日期转大写和C#集合分组
//日转化为大写 private static string DaytoUpper(int day, string type) { if (day < 20) { return MonthtoU ...
随机推荐
- 学习KNN算法体会和总结
k-d树(k-dimensional树的简称),是一种切割k维数据空间的数据结构.主要应用于多维空间重要数据的搜索(如:范围搜索和近期邻搜索). 索引结构中相似性查询有两种主要的方式:一种是范围查询( ...
- 理解linux安装软件
http://www.codecoffee.com/tipsforlinux/articles/27.html -------------------------------------------- ...
- [Cypress] Test Variations of a Feature in Cypress with a data-driven Test
Many applications have features that can be used with slight variations. Instead of maintaining mult ...
- Eclipse如何导入第三方jar包
本文转自:http://blog.csdn.net/mazhaojuan/article/details/21403717 我们在用Eclipse开发程序的时候,经常要用到第三方jar包.引入jar ...
- linux面试之--堆、栈、自由存储区、全局/静态存储区和常量存储区
栈,就是那些由编译器在须要的时候分配,在不须要的时候自己主动清除的变量的存储区.里面的变量一般是局部变量.函数參数等.在一个进程中.位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用.和堆 ...
- 关于isset的一点说明
作者:zhanhailiang 日期:2014-10-08 今天遇到一个非常奇怪的bug,測试例如以下: <? php $a = 'abc'; var_dump(isset($a['code'] ...
- Pointcut is not well-formed: expecting 'name pattern' at character position 36
- WinForm c# 备份 还原 数据库(Yc那些事儿 转)
Yc那些事儿 我愿意 为了我的幸福 奋斗终生 2008-11-17 18:04 WinForm c# 备份 还原 数据库 其实是个非常简单的问题,一个Form,一个Button,一个OpenF ...
- 如何在ashx处理页中获取Session值
本文章摘自:http://www.cnblogs.com/vihone/archive/2010/06/04/1751490.html 在一般事务处理页面,可以轻松的得到 Request,Respon ...
- 洛谷P1725琪露诺(单调队列优化dp)
P1725 琪露诺 题目描述 在幻想乡,琪露诺是以笨蛋闻名的冰之妖精.某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来.但是这只青蛙比以往的要聪明许多,在琪露诺来之前就已经跑到了河的对岸.于是琪 ...