您应该使用.flatMap()从sharedFriendsIds列表创建一个列表,该列表包含在主列表contactsList中的每个Contact对象中.请检查;

List sharedContacts = contactsList.stream()
.map(Contact::getSharedFriendsIds)
.filter(Objects::nonNull)
.flatMap(Collection::stream)
.sorted().collect(Collectors.toList());

.filter()调用适用于列表中与sharedFriendsIds == null有任何联系的情况,因为这会导致下一行中的NPE,我们应该将其过滤掉.还有其他方法可以达到这个目的;

?– 可选的

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的默认配置.