具有以下简单的Java流示例
Stream<Integer> s123 = Stream.of(1, 2, 3);
List<String> abc = Arrays.asList("a", "b", "c");
s123.flatMap(i -> abc.stream())
.peek(System.out::println)
.findFirst()
.ifPresent(System.out::println);
您希望窥视显示什么?
我期待的只是“ a”,因为findFirst
应该使流的评估短路。不幸的是,这不会发生。窥视方法打印“ a”,“ b”,“ c”。似乎是这种情况,因为流是通过flatMap
将同一流连接3次而创建的。
我面临的问题是,如果有人提供一种方法,该方法返回一个流,例如
Stream<String> multipleOf(int i, String ...s)
使用流时,确实需要了解此方法的实现。
现实世界中的示例未使用peek
(我在此处用于说明),但是地图操作完成了一些繁重的工作。最后,这导致了一些严重的性能问题,因为映射的元素比预期多得多。
因此,在性能方面,依靠良好的for循环似乎是最安全的-尽管我非常喜欢流。
欢迎对如何处理这些问题有任何想法。