脚本宝典收集整理的这篇文章主要介绍了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; }
【答案】
如果能确保Choice
的name
没有重复的
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,请注明来意。