public class Person
{
private String name;
private List<Hobby> hobbyList = new ArrayList<>();
...
}
java:
public class Hobby
{
private String name;
private Person person;
private Type type;
...
}
type.java:
public class Type
{
private String name;
private List<Hobby> hobbyList = new ArrayList<>();
...
}
人与嗜好之间是1:m关系,类型与嗜好之间是1:m关系。
List<Person> filteredList = new LinkedList<>();
for (Person p : persons)
{
for (Hobby h : p.getHobbyList())
{
if(h.getType.getName.equals("Ball"))
{
if(!filteredList.contains(p))
{
filteredList.add(p);
}
}
}
}
做为
List<Person> filteredList = persons.stream()
.filter(p -> p.getHobbyList().stream().anyMatch(h -> h.getType().getName().equals("Ball")))
.collect(Collectors.toList());
[更新]
我看到你更新了问题。根据您的更新,以下操作应该适用于您:
Set<Person> filteredSet = persons.stream()
.filter(p -> p.getHobbyList().stream().anyMatch(h -> h.getType().getName().equals("Ball")))
.collect(Collectors.toSet());
问题内容: 我有一堂课: 然后,我有了另一个主要功能,其中有一个功能,必须根据年份过滤该项目列表,并获得名称列表作为结果。 您能告诉我如何使用Java 8 Lambda表达式吗? 谢谢 问题答案: 好吧,您没有说明确切的过滤条件,但是假设您希望按给定年份过滤元素:
问题内容: 我想在Java中构建一个正则表达式,该正则表达式将在FilenameFilter中传递以过滤目录中的文件。 问题是我无法理解正则表达式“思维模型”的问题:) 这是我用来选择要排除的文件的正则表达式 (((ABC | XYZ))+ \ w * Test.xml 我想做的是选择所有以Test.xml结尾但不以ABC或XYZ开头的文件。 您能否添加任何可以帮助我应对正则表达式的资源。 谢谢
问题内容: 我正在通过Java 8中的lambda表达式 当我更改线程代码时,它工作正常 转换为lambda表达式为 但是我无法转换FilenameFilter表达式 并成功转换为 它给错误,如日食 这行有多个标记 -语法错误,请插入“;” 完成语句 -语法错误,插入“}”以完成Block- 语法错误,插入“ AssignmentOperator Expression”以完成分配 问题答案: 首先
问题内容: 我有两个列表,我要过滤两个列表都包含的thoose元素。我想用lambda表达式做到这一点。 用户getName和客户端getUserName都返回String。 这是我的示例代码: 问题答案: 但这效率很低,因为它是O(m * n)。您最好创建一组可接受的名称: 还要注意,它并不严格等同于您拥有的代码(如果已编译),如果有多个用户具有与该客户端相同的名称,则该客户端会将同一客户端两次
我有一个类似这样的组对象 和如下所示的Item对象
过滤表达式 mitmproxy工具中的许多命令都使用过滤器表达式。过滤器表达式由以下运算符组成: 命令 描述 〜a 匹配响应资源:CSS,Javascript,Flash,images。 〜b regex Body 〜bq regex 请求的Body 〜bs regex 响应的Body 〜c int HTTP响应码 〜d regex 域名 〜dst regex 匹配目标地址 〜e 匹配错误 〜h