我需要在一个操作中同时打印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());
答案 0 :(得分:1)
由于不能重用流,因此不允许第二个。来自Stream javadoc
:
一个流只能操作一次(调用中间流或终端流操作)。例如,这排除了“分叉”流,其中相同的源馈送了两个或多个管道,或同一流的多次遍历。如果流实现检测到正在重用该流,则可能抛出IllegalStateException。
您可以将collect
与Collectors.summarizingInt
结合使用:
IntSummaryStatistics collect = stringInt.collect(Collectors.summarizingInt(value -> value));
System.out.println(collect.getMax());
System.out.println(collect.getMin());