小编典典
您应该用来.flatMap()从sharedFriendsIds包含在Contact主列表中每个对象中的列表中创建一个列表contactsList。请检查;
List sharedContacts = contactsList.stream()
.map(Contact::getSharedFriendsIds)
.filter(Objects::nonNull)
.flatMap(Collection::stream)
.sorted().collect(Collectors.toList());
该.filter()调用适用于列表中Contact包含with 的情况sharedFriendsIds ==
null,因为这将导致NPE下一行,因此我们应该将其过滤掉。还有其他方法可以实现这一点;
-- Optional
List sharedContacts = contactsList.stream()
.flatMap(contacts -> Optional.ofNullable(contacts.getSharedFriendsIds())
.map(Collection::stream).orElseGet(Stream::empty))
.sorted().collect(Collectors.toList());
Where the filtering of null `sharedFriendsIds` are done in such a way that
they are absorbed into the `flatMap` logic as empty streams.
-- emptyIfNull()
您可以按如下方式包含来自apache.commons和使用CollectionUtils.emptyIfNull方法的集合依赖项;
public static Stream collectionAsStream(Collection collection) {
return emptyIfNull(collection).stream();
}
然后像这样从原始流中调用它;
List sharedContacts = contactsList.stream()
.map(Contact::getSharedFriendsIds)
.flatMap(Foo::collectionAsStream)
.sorted().collect(Collectors.toList());
.sequential我猜您还使用了排序逻辑,我应该使用.sorted方法,因为顺序是用于触发非并行使用的,这已经是的默认配置Stream。
2020-11-16