例如:
给出Set<Set<Integer>>
,我尝试使用
int min = nestedSets.stream().map(s->s.stream().min(Comparator.naturalOrder()).get()).min(Comparator.naturalOrder()).get();
我最初的想法是使用flatMap
,但是它没有返回期望的结果。
Set<Set<Integer>> nestedSets = ...
IntSummaryStatistics stats = nestedSets.stream()
.flatMap(Set::stream)
.mapToInt(Integer::intValue)
.summaryStatistics();
stats.getMax();
stats.getMin();
您可以将元素收集到IntSummaryStatistics
中,这是:
用于收集统计信息(例如计数,最小值,最大值,总和和平均值的状态对象。
例如:
IntSummaryStatistics
如果未记录任何值,则Set<Set<Integer>> set = ...;
IntSummaryStatistics stats =
set.stream() // Stream<Set<Integer>>
.flatMap(Set::stream) // Stream<Integer>
.mapToInt(Integer::intValue) // IntStream
.summaryStatistics(); // IntSummaryStatistics
int min = stats.getMin();
int max = stats.getMax();
返回#getMin()
,Integer.MAX_VALUE
返回#getMax()
。
返回的类型应该是Integer.MIN_VALUE
,因为您不知道找到的最小值。您可以这样做:
OptionalInt
或者,您可以将OptionalInt min = nestedSets.stream()
.flatMap(Set::stream)
.mapToInt(Integer::intValue)
.min();
与Comparator
内的映射功能(Integer::intValue
)使用完全相同的映射功能,而将其装在方框中Stream::min
:
Optional<Integer>
我发现这些解决方案易于阅读,没有多余的代码。