Top stackoverflow 问答系列之Java 8 Stream 篇 (一)

发布时间:2019-11-17 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Top stackoverflow 问答系列之Java 8 Stream 篇 (一)脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

从Java 8 2014 发布到现在,已有三年多了,JDK 8 也得到了广泛的应用,但似乎Java 8里面最重要的特性:Lambdas和Stream APIs对很多人来说还是很陌生。想通过介绍Stackoverflow一些实际的问题和答案来讲解在现实开发中我们可以通过Lambdas和Stream APIs可以做些什么,以及什么是正确的姿势。在介绍那些问答之前,我们先要对Java 8 和Stream APIs有些基本的了解,这里推荐几篇文章

如果你对Java 8 Lambds和Stream APIs还不是很了解,建议先把上面的几篇文章看几遍。
接下来是问答:


1. Java 8 List<V> into Map<K, V>
有一个List<Choice> choices, 要把它转换成一个Map<String, Choice>, Map的Key是Choice的名称,Value是Choice,如果用Java 7,代码将是:

PRivate Map<String, Choice> nameMap(List<Choice> choices) {     final Map<String, Choice> hashMap = new HashMap<>();     for (final Choice choice : choices) {         hashMap.put(choice.getName(), choice);     }     return hashMap; }

【答案】
如果能确保Choicename没有重复的

Map<String, Choice> result =         choices.stream().collect(Collectors.toMap(Choice::getName,                                               Function.identity()));

如果name有重复的,上面的代码会抛IllegalStateException,要用下面的代码,

Map<String, List<Choice>> result =         choices.stream().collect(Collectors.groupingBy(Choice::getName));

2. How to Convert a Java 8 Stream to an Array?
什么是最简便的方式把一个Stream转换成数组

【答案】

String[] strArray = Stream.of("a", "b", "c")toArray(size -> new String[size]);  int[] intArray = IntStream.of(1, 2, 3).toArray();

3.Retrieving a List from a java.util.stream.Stream in Java 8
怎么把一个Stream转换成List?下面是我的尝试:

List<Long> sourceLongList = Arrays.asList(1L, 10L, 50L, 80L, 100L, 120L, 133L, 333L); List<Long> targetLongList = new ArrayList<>(); sourceLongList.stream().filter(l -> l > 100).forEach(targetLongList::add);

【答案】

targetLongList = sourceLongList.stream()         .filter(l -> l > 100)         .collect(Collectors.toList());

这一篇的目的主要以学习前面推荐的几篇文章为主,和介绍了几个简单的问题,接下来在第二篇会介绍更多有兴趣的问答。

【更新】更多请参阅:Abacus-util.

脚本宝典总结

以上是脚本宝典为你收集整理的Top stackoverflow 问答系列之Java 8 Stream 篇 (一)全部内容,希望文章能够帮你解决Top stackoverflow 问答系列之Java 8 Stream 篇 (一)所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。