当前位置: 首页 > 知识库问答 >
问题:

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

壤驷麒
2023-03-14

我想检查list是否包含一个对象,该对象具有一个具有特定值的字段。现在,我可以使用一个循环来进行检查,但我很好奇是否有更高效的代码。

类似的东西;

if(list.contains(new Object().setName("John"))){
    //Do some stuff
}

我知道上面的代码没有做任何事情,它只是大致演示我正在尝试实现的东西。

另外,为了澄清一下,我不想使用简单循环的原因是,这段代码当前将在循环中运行,循环中的循环中的循环中的循环中的循环中的循环中的循环中的循环中的循环中的循环中的循环中的循环中的循环中的循环。为了可读性,我不想继续在这些循环中添加循环。所以我想知道是否有任何简单的选择。

共有1个答案

卢承弼
2023-03-14

如果您使用的是Java8,也许您可以尝试以下内容:

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();
}

如果列表 包含名称为namemyobject,则此方法将返回true。如果要对getName().equals(name)的每个MyObject执行操作,则可以尝试如下操作:

public void perform(final List<MyObject> list, final String name){
    list.stream().filter(o -> o.getName().equals(name)).forEach(
            o -> {
                //...
            }
    );
}

或者,正如注释所建议的(感谢MK10),您可以使用stream#anymatch方法:

public boolean containsName(final List<MyObject> list, final String name){
    return list.stream().anyMatch(o -> o.getName().equals(name));
}
 类似资料:
  • 问题内容: 我想检查一个是否包含一个具有特定值的字段的对象。现在,我可以使用一个循环来检查,但是我很好奇是否有更高效的代码。 类似的东西; 我知道上面的代码什么也做不了,只是为了大致演示一下我要实现的目标。 另外,为了澄清,我不想使用简单循环的原因是,这段代码当前将进入一个位于循环内的循环内。为了可读性,我不想一直在这些循环中添加循环。所以我想知道是否有简单的替代方案。 问题答案: Streams

  • 使用下面的代码,我可以检查对象的是否包含匹配特定值的字段。 但是,只有当返回时,这才起作用。我正在尝试修改代码,以便在包含并且名称可以匹配列表中的任何元素时能够正常工作。类似这样的事情: 目前,Eclipse抛出警告:无关(因为keyword是一个字符串,返回) 谢谢!

  • 问题内容: 在Python 2.x中,当您要将一个方法标记为抽象时,可以这样定义它: 然后,如果您忘记覆盖它,则会收到一个很好的提醒异常。是否存在将字段标记为抽象的等效方法?还是在您可以做的所有工作中在类文档字符串中说明? 起初我以为可以将字段设置为NotImplemented,但是当我查看它的实际用途(进行大量比较)时,它似乎很脏。 问题答案: 是的你可以。使用装饰器。例如,如果您有一个名为“e

  • 问题内容: 我在PHP中遇到问题,从用户名等于$ myusername的数据库中选择Infomation 我可以使用从登录页面到登录页面的会话来回显用户名。 但我希望能够从该数据库中选择诸如“ bio”和“ email”之类的内容,并将它们放入名为$ bio和$ email的变量中,以便我可以回显它们。 这是数据库的样子: 有任何想法吗?:/ 问题答案: 您应该连接到数据库,然后按以下方式获取行:

  • 在我的角度 this.device返回对象。每个对象都包含一个字段,并且在所有15个对象上都有不同的值。如果我可以访问underscore.js,我就会这样做,但是在这个项目中,我没有它。 什么是JS的方法来访问它而不需要执行for循环?

  • 问题内容: 我需要在Seaborn distplot上绘制与某些X值相对应的点,以使它们落在密度曲线上或低于密度曲线。这是来自以下URL的distplot: 从Seaborn网站-distplot示例 因此,例如,在上面显示的曲线图中,我需要以编程方式确定与落在密度曲线上的X值0对应的Y轴值是多少。从图中看来,它大约在0.37左右。如何在我的程序中得到它? 假设可以做到,那么我如何在所示的图中显示