我对这是如何工作的有一个想法,但是似乎必须有一种更优雅的方法。
Set<List<SearchResult>> searchResults = new HashSet<>();
…
return searchResults.stream()
.reduce((sr1, sr2) -> {
sr1.retainAll(sr2);
return sr1;
})
.get().stream()
.sorted(Comparator.comparing(SearchResult::getDocno))
.collect(Collectors.toList());
我正在流处理Set,找到与retainAll()
的交集-到目前为止,一切都很好。但是然后Optional.get()
需要再次流式传输,以便我对其进行排序。那似乎不对。另外,我的IDE建议我需要进行isPresent()
检查,但不确定如何将其插入。
注意:我可以轻松地使用循环来完成此操作,但是我对学习使用流更感兴趣。
答案 0 :(得分:3)
您与IMO非常接近,只是reduce
需要一直返回一个新的Object:
searchResults
.stream()
.reduce((left, right) -> {
List<SearchResult> list = new ArrayList<>(left);
list.retainAll(right);
return list;
})
.orElse(Collections.emptyList())
.stream()
.sorted(Comparator.comparing(SearchResult::getDocno))
.collect(Collectors.toList());