我想检查 List 中是否包含具有特定值的字段的对象。现在,我可以使用循环来遍历并检查,但我很好奇是否有更高效的代码...
我想检查 a 是否 List
包含一个具有特定值的字段的对象。现在,我可以使用循环来遍历并检查,但我很好奇是否有更高效的代码。
类似于;
if(list.contains(new Object().setName("John"))){
//Do some stuff
}
我知道上面的代码没有任何作用,它只是为了大致演示我想要实现的目标。
另外,需要澄清的是,我不想使用简单循环的原因是,此代码当前将进入循环内部,而循环内部又包含循环。为了便于阅读,我不想继续在这些循环中添加循环。所以我想知道是否有任何简单的替代方案。
如果你正在使用 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()));
}