不需要来自已接受答案的辅助方法。 Streams 可以与 lambda 一起使用,或者通常使用 Method References 缩短。流支持功能操作。 map() 转换元素,collect(...) 或 toArray() 将流包装回数组或集合中。
Venkat Subramaniam's talk (video) 解释得比我好。
1 将List<String> 转换为List<Integer>
List<String> l1 = Arrays.asList("1", "2", "3");
List<Integer> r1 = l1.stream().map(Integer::parseInt).collect(Collectors.toList());
// the longer full lambda version:
List<Integer> r1 = l1.stream().map(s -> Integer.parseInt(s)).collect(Collectors.toList());
2 将List<String> 转换为int[]
int[] r2 = l1.stream().mapToInt(Integer::parseInt).toArray();
3 将String[] 转换为List<Integer>
String[] a1 = {"4", "5", "6"};
List<Integer> r3 = Stream.of(a1).map(Integer::parseInt).collect(Collectors.toList());
4 将String[] 转换为int[]
int[] r4 = Stream.of(a1).mapToInt(Integer::parseInt).toArray();
5 将String[] 转换为List<Double>
List<Double> r5 = Stream.of(a1).map(Double::parseDouble).collect(Collectors.toList());
6(奖励)将int[] 转换为String[]
int[] a2 = {7, 8, 9};
String[] r6 = Arrays.stream(a2).mapToObj(Integer::toString).toArray(String[]::new);
当然还有更多的变化。
另见Ideone version of these examples。可以点击fork然后run在浏览器中运行。