我有两个列表,我要过滤两个列表都包含的thoose元素。我想用lambda表达式做到这一点。
用户getName和客户端getUserName都返回String。
这是我的示例代码:
List<Client> clients = new ArrayList<>();
List<User> users = new ArrayList<>();
List<Client> results = new ArrayList<>();
for (Client user : users) {
for(Client client: clients){
if(user.getName().equals(client.getUserName())){
result.add(client);
}
}
}
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());
还要注意,它并不严格等同于您拥有的代码(如果已编译),如果有多个用户具有与该客户端相同的名称,则该客户端会将同一客户端两次添加到列表中。
这个查询有效,字段是一个
问题内容: 在Python中,我有一个元素列表和一个索引列表。我有什么办法可以立即检索其中的值作为索引的所有那些项? 例: 问题答案: 我不知道有什么方法可以做。但是您可以使用列表理解:
给定一个元素列表,我想获取具有给定属性的元素并将其从列表中删除。我找到的最佳解决方案是: 是否可以在lambda表达式中组合get和删除?
问题内容: 我的代码如下所示: 它返回一个列表,其中仅包含与匹配的条目。我想知道是否有一个内置的功能,类似于: 问题答案: 除了Konstantin的回答:Java 8 通过对该类添加了支持,该类在内部调用: 太棒了!
如果我有一个清单,比如说 我如何才能获得一个名字不同的年龄最大的学生名单?在C#中,使用system.linq GroupBy然后比较,然后用select进行扁平化,这将非常简单,我不太确定如何在Java中实现同样的功能。
有一张单子 如何过滤列表,通过获得最高的映射组,然后使用Java Stream组合到列表中?结果示例如下: ps:如果在多个地图中有相同的值,请将它们全部保留在列表中。 初始代码: