我想检查 List
是否包含一个具有特定值的字段的对象。现在,我可以使用循环进行检查,但我很好奇是否有更高效的代码。
类似的东西;
if(list.contains(new Object().setName("John"))){
//Do some stuff
}
我知道上面的代码没有做任何事情,只是为了大致展示我想要实现的目标。
另外,为了澄清,我不想使用简单循环的原因是因为这段代码当前将进入一个循环内的循环内,该循环内是一个循环内。为了可读性,我不想继续向这些循环添加循环。所以我想知道是否有任何简单的(ish)替代品。
最佳答案
流
如果您使用的是 Java 8,也许您可以尝试以下方法:
public boolean containsName(final List<MyObject> list, final String name){
return list.stream().filter(o -> o.getName().equals(name)).findFirst().isPresent();
}
或者,您可以尝试这样的方法:
public boolean containsName(final List<MyObject> list, final String name){
return list.stream().map(MyObject::getName).filter(name::equals).findFirst().isPresent();
}
此方法将返回 true
如果 List<MyObject>
包含 MyObject
名称为 name
.如果您想对每个 MyObject
执行操作那getName().equals(name)
,那么你可以试试这样的:
public void perform(final List<MyObject> list, final String name){
list.stream().filter(o -> o.getName().equals(name)).forEach(
o -> {
//...
}
);
}
在哪里 o
代表 MyObject
实例。
或者,正如评论所建议的(感谢 MK10),您可以使用 Stream#anyMatch
方法:
public boolean containsName(final List<MyObject> list, final String name){
return list.stream().anyMatch(o -> name.equals(o.getName()));
}
关于Java List.contains(字段值等于 x 的对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18852059/