Java List.contains(字段值等于 x 的对象)

标签 java list search contains

我想检查 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/

相关文章:

java - Java 中的层次结构和数据结构(或 XML 到对象转换 : best practices)

java - Android Studio :PutExtra & GetStringExtra With Online Database (no value)

html - 如何在右侧列出图标并在每个图标下方相应地显示文字?

Python:如何在未排序列表(大数据集)中查找大于某个数字的所有项目

python - Flask-Sqlalchemy + Sqlalchemy-searchable 返回空列表

java - 神经网络处理不同宽度数组数据时出错

java - 非常快地将多行插入 Oracle 数据库

python - 可以一次 append 多个列表吗? (Python)

r - R 中列表对象与 apply 函数之间的操作

java - 如何在 JTable 中实现搜索