在一个流中同时收集最小和最大

时间:2019-03-18 01:22:11

标签: java java-stream

我需要在一个操作中同时打印int流的最小值和最大值。我目前有2项操作,但第二项是不允许的。不知何故,收藏家不为我工作:

Stream<Integer> stringInt = Stream.of(8,50,16,0,72);
System.out.println(stringInt.reduce(Math::min).get());
System.out.println(stringInt.reduce(Math::max).get());

1 个答案:

答案 0 :(得分:1)

由于不能重用流,因此不允许第二个。来自Stream javadoc

  

一个流只能操作一次(调用中间流或终端流操作)。例如,这排除了“分叉”流,其中相同的源馈送了两个或多个管道,或同一流的多次遍历。如果流实现检测到正在重用该流,则可能抛出IllegalStateException。

您可以将collectCollectors.summarizingInt结合使用:

IntSummaryStatistics collect = stringInt.collect(Collectors.summarizingInt(value -> value));

System.out.println(collect.getMax());
System.out.println(collect.getMin());