Predicate<Client> hasSameNameAsoneUser = c -> users.stream().anyMatch(u -> u.getName().equals(c.getName()));return clients.stream() .filter(hasSameNameAsOneUser) .collect(Collectors.toList());
但这效率很低,因为它是O(m * n)。您最好创建一组可接受的名称:
Set<String> acceptableNames = users.stream() .map(User::getName) .collect(Collectors.toSet());return clients.stream() .filter(c -> acceptableNames.contains(c.getName())) .collect(Collectors.toList());
还要注意,它并不严格等同于您拥有的代码(如果已编译),如果有多个用户具有与该客户端相同的名称,则该客户端会将同一客户端两次添加到列表中。



