【问题标题】:Check if a List<Object> contains a property检查 List<Object> 是否包含属性
【发布时间】:2016-01-20 12:01:51
【问题描述】:

我在java中有以下列表

List<MyObject> =[id ="id", name= "name", time =DateObj, id = "id2", name = "name2".. ]

我想检查这个列表是否包含“name2”,而不必遍历列表。是否有可用的 API 在 Java 中实现这一点?

【问题讨论】:

  • 也许是个好主意,如果你创建一个 HashMap,键是对象的名称和值 MyObject。
  • 使用地图。其中 key 是你知道的字段和值
  • 这甚至不是 Java 代码。我猜MyObject 包含字段idnametime?如果是这样,要么使用单独的地图,要么只遍历列表元素并检查每个元素。

标签: java list contains


【解决方案1】:

如果 MyObject 是您自己的类,您可以适当地覆盖方法 equals(和哈希码)。因此,您可以使用标准方法 list.contains

List<MyObject> myObjectList = ...;
...
MyObject objectToBeFound = new MyObject("name2", ...);
if (myObjectList.contains(objectToBeFound))
{
    //object is in the list
}
else
{
    //it is not in the list
}

PS。但实际上无论如何都会有某种依赖于 List 实现的循环。其中一些可能会进行简单的迭代。 :)

【讨论】:

    【解决方案2】:

    在这种情况下,您可以使用HashMap&lt;String,MyObject&gt;

    如果要根据名称进行检查。然后在HashMap中使用name作为key。

    HashMap<String, MyObject> map = new HashMap<String, MyObject>();
    map.put(obj.getName(), obj);
    

    检查地图是否包含特定值。

    if (map.containsKey("name2")) {
         // do something
    }
    

    【讨论】:

      【解决方案3】:

      没有循环就没有办法做到这一点。但当然,循环可以通过库方法完成,而不是由您完成。

      最简单的方法是使用 Java 8 流:

      boolean name2Exists = list.stream().anyMatch(item -> "name2".equals(item.getName()));
      

      【讨论】:

      • 该死的,流太神奇了。
      猜你喜欢
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 2013-03-14
      • 2021-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-07
      相关资源
      最近更新 更多