java8中提供了对集合进行转化,然后进行归集的的操作。这就不得不提Collectors这个类了,真的很强大,我们看示例吧。

KeyAndValue a1 = newKeyAndValue().setName("kevin").setValue("lee");

KeyAndValue a2 = newKeyAndValue().setName("kevin").setValue("lee");

KeyAndValue a3 = newKeyAndValue().setName("kevin1").setValue("lee");

KeyAndValue a4 = newKeyAndValue().setName("kevin1").setValue("123123");

KeyAndValue a5 = newKeyAndValue().setName("kevin2").setValue("lee5");

KeyAndValue a6 = newKeyAndValue().setName("kevin3").setValue("lee8");

List list = Arrays.asList(a1, a2, a3, a4, a5, a6);

基础的toList、toSet、toMap就不讲了,简单易用,一看就会,我说说稍微复杂的。

collectingAndThen:使用collector进行归集,然后对归结的结果进行加工

List collect = list.stream().collect(Collectors.collectingAndThen(Collectors.mapping(a -> a.getValue(), Collectors.toList()), v -> {

v.sort(Comparator.comparing(String::length).reversed());

returnv;

}));

System.out.println(collect);

//[123123, lee5, lee8, lee, lee, lee]

groupingBy分组操作:基于一个key值,对元素进行分组

Map> collect = list.stream().collect(Collectors.groupingBy(a -> a.getName()));

System.out.println(JSON.toJSONString(collect));

// {"kevin":[{"name":"kevin","value":"lee"},{"name":"kevin","value":"lee"}],"kevin2":[{"name":"kevin2","value":"lee5"}],"kevin1":[{"name":"kevin1","value":"lee"},{"name":"kevin1","value":"123123"}],"kevin3":[{"name":"kevin3","value":"lee8"}]}

Map> collect1 = list.stream().collect(Collectors.groupingBy(KeyAndValue::getName, Collectors.mapping(b -> b.getValue(), Collectors.toSet())));

System.out.println(JSON.toJSONString(collect1));

// {"kevin":["lee"],"kevin2":["lee5"],"kevin1":["123123","lee"],"kevin3":["lee8"]}

Map> collect3 = list.stream().collect(Collectors.groupingBy(KeyAndValue::getName, Collectors.toSet()));

System.out.println(JSON.toJSONString(collect3));

// {"kevin":[{"name":"kevin","value":"lee"}],"kevin2":[{"name":"kevin2","value":"lee5"}],"kevin1":[{"name":"kevin1","value":"lee"},{"name":"kevin1","value":"123123"}],"kevin3":[{"name":"kevin3","value":"lee8"}]}

Map> collect4 = list.stream().collect(Collectors.groupingBy(KeyAndValue::getName,TreeMap::new, Collectors.toSet()));

System.out.println(JSON.toJSONString(collect4));

// {"kevin":[{"name":"kevin","value":"lee"}],"kevin1":[{"name":"kevin1","value":"lee"},{"name":"kevin1","value":"123123"}],"kevin2":[{"name":"kevin2","value":"lee5"}],"kevin3":[{"name":"kevin3","value":"lee8"}]}

join 操作:对元素进行拼接,有三个方法。

String joinResult = list.stream().map(KeyAndValue::getName).collect(Collectors.joining());

System.out.println(joinResult);

//kevinkevinkevin1kevin1kevin2kevin3

String joinResult1 = list.stream().map(KeyAndValue::getName).collect(Collectors.joining(","));

System.out.println(joinResult1);

// kevin,kevin,kevin1,kevin1,kevin2,kevin3

String joinResult2 = list.stream().map(KeyAndValue::getName).collect(Collectors.joining(",","(",")"));

System.out.println(joinResult2);

// (kevin,kevin,kevin1,kevin1,kevin2,kevin3)

partitioningBy操作:基于断言对元素按true和false进行分组

Map> partitioningBy = list.stream()

.collect(Collectors.partitioningBy(k -> k.getName().equals("kevin")));

System.out.println(partitioningBy);

//{false=[KeyAndValue(name=kevin1, value=lee), KeyAndValue(name=kevin1, value=123123), KeyAndValue(name=kevin2, value=lee5), KeyAndValue(name=kevin3, value=lee8)], true=[KeyAndValue(name=kevin, value=lee), KeyAndValue(name=kevin, value=lee)]}

Map> partitioningBy1 = list.stream()

.collect(Collectors.partitioningBy(k -> k.getName().equals("kevin"), Collectors.mapping(v -> v.getValue(), Collectors.toList())));

System.out.println(partitioningBy1);

// {false=[lee, 123123, lee5, lee8], true=[lee, lee]}

min/minBy , max/maxBy 用法一致:使用一个比较器获得最大值或最小值

Optional min = list.stream().map(KeyAndValue::getName).min(Comparator.comparing(v->v.length()));

System.out.println(min.get());

//kevin

Optional min1 = list.stream().min(Comparator.comparing(v->v.getValue().length()));

System.out.println(min1.get());

// KeyAndValue(name=kevin, value=lee)

Optional min2 = list.stream().map(KeyAndValue::getName).collect(Collectors.minBy(Comparator.comparing(String::length)));

System.out.println(min2.get());

//kevin

Optional min3 = list.stream().collect(Collectors.minBy(Comparator.comparing(v->v.getValue().length())));

System.out.println(min3.get());

// KeyAndValue(name=kevin, value=lee)

mapping操作:使用一个function对元素进行加工,然后使用collector进行收集

List mapping = list.stream().collect(Collectors.mapping(v -> v.getValue().concat("agc"), Collectors.toList()));

System.out.println(mapping);

//类似Stream先进行map操作,再进行collectList mapping_ = list.stream().map(v -> v.getValue().concat("agc")).collect(Collectors.toList());

System.out.println(mapping_);

// [leeagc, leeagc, leeagc, 123123agc, lee5agc, lee8agc]

toCollection:将元素按照顺序复制到另一个收集器(集合)中,类似于Collectors.toList()

ArrayList collect1 = list.stream().collect(Collectors.toCollection(ArrayList::new));

System.out.println(collect1);

// [KeyAndValue(name=kevin, value=lee), KeyAndValue(name=kevin, value=lee), KeyAndValue(name=kevin1, value=lee), KeyAndValue(name=kevin1, value=123123), KeyAndValue(name=kevin2, value=lee5), KeyAndValue(name=kevin3, value=lee8)]

根据某个属性进行去重

TreeSet collect = list.stream().collect(Collectors.toCollection(() -> newTreeSet(Comparator.comparing(KeyAndValue::getName))));

System.out.println(collect);

// [KeyAndValue(name=kevin, value=lee), KeyAndValue(name=kevin1, value=lee), KeyAndValue(name=kevin2, value=lee5), KeyAndValue(name=kevin3, value=lee8)]

java8 collectors类_java8之collectors相关推荐

  1. collectors 求和_Java8中Collectors求和功能的自定义扩展

    Apple iPhone 11 (A2223) 128GB 黑色 移动联通电信4G手机 双卡双待 4999元包邮 去购买 > 起因 业务中需要将一组数据分类后收集总和,原本可以使用Collect ...

  2. Java8的Stream中的Collectors操作求double类型和的坑

    Java8的Stream中的Collectors操作求double类型和的坑 无敌踩坑王的我又双叒叕来了!!!!!! 例子: @Testpublic void testSumDouble() {dou ...

  3. Jdk1.8 Collectors类使用详解(实用干货)

    Collectors类大家都并不陌生,从jdk1.8开始跟stream()流配合之后,写代码效率得到提升,源码里我们可以看到有很多的方法,比如groupingBy 和maxBy,这些都是干嘛的呢,这篇 ...

  4. java8实战怎么样_Java8中你可能不知道的一些地方之Stream实战

    说起流,我们会想起手机 ,电脑组装流水线,物流仓库商品包装流水线等等.如果把手机 ,电脑,包裹看做最终结果的话,那么加工商品前的各种零部件就可以看做数据源,而中间一系列的加工作业操作,就可以看做流的处 ...

  5. java8 流操作_java8中的流操作

    Stream 流是 Java 8 新提供给开发者的一组操作集合的 API,将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选.排序.聚合等.元素流在管道中经过 ...

  6. java8 时间类API

    前言 Instant LocalDate Clock SystemnanoTime 前言 (未完待续) 推荐一篇系统学习的java8时间类文章 我这里会介绍java8 新API中常用个类怎么用 应该是 ...

  7. 使用Java8 Files类读写文件

    Java8 Files类的newBufferedReader()和newBufferedWriter()方法 这两个方法接受Path类型的参数.Path 类是Java8 NIO中的接口.可以由Path ...

  8. java8 stream().map().collect()的Collectors.toList()、Collectors.toMap()、Collectors.groupingBy()的

    一.Collectors.toList() 现在有个集合: List<User> users = getUserList(); 现在需要将这些user的id提取出来.这个很简单,for循环 ...

  9. collectors排序_java8特性:Collectors.groupingBy进行分组、排序等操做 (二)

    Stream类的函数java R collect(Collector super T, A, R> collector); 能够对数据集进行简单的分组统计.函数参数为接口Collector,其实 ...

最新文章

  1. 下列有关mysql数据库中的null值_MySQL数据库中与 NULL值有关的问题
  2. 计算机网络最基础知识
  3. 高滤波器opencv(Python)
  4. 两个服务器之间怎么传输大量数据速度快 java socket_一口气说出Kafka为啥这么快?...
  5. [编程题]表达式合法判断
  6. 流程再造:信息化建设的最佳拍档
  7. java7和java8切换_切换表达式到Java吗?
  8. 在Python中使用Seaborn和WordCloud可视化YouTube视频
  9. 前端学习(3146):react-hello-react之getDenvied
  10. PDF 补丁丁 0.6.0.3369 版发布(修复保存文件时文件名替代符失效的问题)
  11. [ACM] hdu 1285 确定比赛 (拓扑排序)
  12. 折半查找的实现(1010)swust-oj
  13. 从初级程序员逆袭为技术大牛,你需要懂这 10 项技术!
  14. 按clear按钮清空两个文本框的内容,按copy按钮时将Source文本框的内容复制到Target文本框,按close按钮结束程序的运行
  15. PhotoMill X for Mac(图片批处理工具)
  16. 用代码排出自己的名字
  17. 无缝拼接屏是怎样实现的?有什么特点!
  18. AM3352时钟系统分析
  19. vue图片宽高自适应_Vue组件宽高自适应问题
  20. Geom error原因以及解决办法

热门文章

  1. 【金三银四】软件测试简历项目经验怎么写,没有项目经验?
  2. Ubuntu安装Pycharm专业版
  3. Mysql 自增主键重复的问题
  4. 沙特SASO2927能效与SASO2902的区别
  5. 如何快速的学习一门新的语言
  6. Python数据分析开发环境Anaconda
  7. 简单的实现微信领取红包界面,按钮旋转动画效果。
  8. 用PS将一张暗照片变亮
  9. 好的创业项目需要靠资源去支撑
  10. Java物流项目第六天 车辆轨迹服务开发(pd-netty、pd-druid)