我想检查一个列表是否包含一个对象,该对象具有具有特定值的字段。现在,我可以使用循环来遍历和检查,但我很好奇是否有更高效的代码。
类似的;
if(list.contains(new Object().setName("John"))){
//Do some stuff
}
我知道上面的代码没有做任何事情,它只是粗略地演示了我想要实现的目标。
另外,澄清一下,我不想使用简单循环的原因是,这段代码将进入一个循环,这个循环在一个循环中,而这个循环又在一个循环中。为了可读性,我不想一直在这些循环中添加循环。所以我想知道是否有什么简单的替代方案。
Eclipse集合
如果您正在使用Eclipse Collections,则可以使用anyssatisfy()方法。如果可能的话,在ListAdapter中调整列表或将列表更改为ListIterable。
ListIterable<MyObject> list = ...;
boolean result =
list.anySatisfy(myObject -> myObject.getName().equals("John"));
如果要经常执行这样的操作,最好提取一个方法来回答该类型是否具有该属性。
public class MyObject
{
private final String name;
public MyObject(String name)
{
this.name = name;
}
public boolean named(String name)
{
return Objects.equals(this.name, name);
}
}
您可以使用替代形式anySatisfyWith()和方法引用。
boolean result = list.anySatisfyWith(MyObject::named, "John");
如果不能将List更改为ListIterable,下面是如何使用ListAdapter。
boolean result =
ListAdapter.adapt(list).anySatisfyWith(MyObject::named, "John");
注意:我是Eclipse集合的提交者。