如何解决Java流的意外行为?

时间:2019-04-11 15:04:26

标签: java java-stream

具有以下简单的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循环似乎是最安全的-尽管我非常喜欢流。 欢迎对如何处理这些问题有任何想法。

0 个答案:

没有答案