Java 8 新特性 Stream类的collect方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java 8 新特性 Stream类的collect方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3049字,纯文字阅读大概需要5分钟。
内容图文
![Java 8 新特性 Stream类的collect方法](/upload/InfoBanner/zyjiaocheng/774/5216171dd05b4b079783c5d182f68f9a.jpg)
1.Collectors.toList()
:转换成List集合。/ Collectors.toSet()
:转换成set集合。
System.out.println(Stream.of("a", "b", "c","a").collect(Collectors.toSet()));
2.Collectors.toCollection(TreeSet::new)
:转换成特定的set集合。
TreeSet<String> treeSet = Stream.of("a", "c", "b", "a").collect(Collectors.toCollection(TreeSet::new)); System.out.println(treeSet);
3.
Collectors.toMap(keyMapper, valueMapper, mergeFunction)
:转换成map。
Map<String, String> collect = Stream.of("a", "b", "c", "a").collect(Collectors.toMap(x -> x, x -> x + x,(oldVal, newVal) -> newVal)));
collect.forEach((k,v) -> System.out.println(k + ":" + v));
补充
关于合并函数 BinaryOperator<U> mergeFunction
对象
当toMap中没有用合并函数时,出现key重复时,会抛出异常 : Exception in thread "main" java.lang.IllegalStateException: Duplicate key aa
当使用合并函数时,可通过Labmda表达式,对重复值进行处理
4.Collectors.minBy(Integer::compare)
:求最小值,相对应的当然也有maxBy方法。
5.Collectors.averagingInt(x->x)
:求平均值,同时也有averagingDouble、averagingLong方法。
6.Collectors.summingInt(x -> x))
:求和。
7.Collectors.summarizingDouble(x -> x)
:可以获取最大值、最小值、平均值、总和值、总数。
DoubleSummaryStatistics summaryStatistics = Stream.of(1, 3, 4).collect(Collectors.summarizingDouble(x -> x)); System.out.println(summaryStatistics .getAverage());
8. Collectors.groupingBy(x -> x)
:有三种方法,查看源码可以知道前两个方法最终调用第三个方法,
第二个参数默认HashMap::new
第三个参数默认Collectors.toList()
Map<Integer, List<Integer>> map = Stream.of(1, 3, 3, 2).collect(Collectors.groupingBy(Function.identity())); System.out.println(map);
Map<Integer, Integer> map1 = Stream.of(1, 3, 3, 2).collect(Collectors.groupingBy(Function.identity(), Collectors.summingInt(x -> x))); System.out.println(map1);
HashMap<Integer, List<Integer>> hashMap = Stream.of(1, 3, 3, 2).collect(Collectors.groupingBy(Function.identity(), HashMap::new, Collectors.mapping(x -> x + 1, Collectors.toList()))); System.out.println(hashMap);
补充: identity()是Function类的静态方法,和 x->x 是一个意思,
当仅仅需要自己返回自己时,使用identity()能更清楚的表达作者的意思.
写的复杂一点,绕一点,对理解很有好处.下边是运行结果:
9.Collectors.partitioningBy(x -> x > 2)
,把数据分成两部分,key为ture/false
。第一个方法也是调用第二个方法,第二个参数默认为Collectors.toList()
Map<Boolean, List<Integer>> map = Stream.of(1, 3, 3, 2).collect(Collectors.partitioningBy(x -> x > 2)); Map<Boolean, Long> longMap = Stream.of(1, 3, 3, 2).collect(Collectors.partitioningBy(x -> x > 1, Collectors.counting()));
10.Collectors.joining(",")
:拼接字符串。
System.out.println(Stream.of("1", "3", "3", "2").collect(Collectors.joining(",")));
11.
Collectors.collectingAndThen(Collectors.toList(), x -> x.size()):先执行collect操作后再执行第二个参数的表达式。这里是先塞到集合,再得出集合长度。
Integer integer = Stream.of("1", "2", "3").collect(Collectors.collectingAndThen(Collectors.toList(), x -> x.size()));
12.Collectors.mapping(...)
:跟Stream的map操作类似,只是参数有点区别
System.out.println(Stream.of(1, 3, 5).collect(Collectors.mapping(x -> x + 1, Collectors.toList())));
内容总结
以上是互联网集市为您收集整理的Java 8 新特性 Stream类的collect方法全部内容,希望文章能够帮你解决Java 8 新特性 Stream类的collect方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。