Java List.contains(字段值等于 x 的 ArrayList<String>)

Java List.contains(ArrayList<String> with field value equal to x)

使用下面的代码我可以检查 List 个对象是否包含匹配特定值的字段。

public boolean containsName(final List<MyObject> list, final String name){
    return list.stream().filter(o -> o.getName().equals(name)).findFirst().isPresent();
}

但是,这仅在 o.getName() return 为 String 时有效。我正在尝试修改代码,以便在 MyObject 包含 ArrayList<String> 并且名称可以匹配列表中的任何元素时工作。像这样:

public boolean containsKeyword(final List<KeywordPOJO> list, final String keyword){
    return list.stream().filter(o -> o.getKeywordList().equals(keyword)).findFirst().isPresent();
}

其中 KeywordPOJO return 是关键字列表而不是单个 String。如果 keyword 匹配 ANY 这些关键字方法应该 return true.

目前,Eclipse 抛出警告:Unlikely argument type for equals(): String seems to be unrelated to ArrayList<String>(因为关键字是字符串且 getKeywordList() returns ArrayList<String>

谢谢!

您可以简单地使用 List.contains:

o -> o.getKeywordList().contains(keyword);

作为旁注,您的表达式可以简化为 Stream.anyMatch:

public boolean containsKeyword(final List<KeywordPOJO> list, final String keyword){
    return list.stream().anyMatch(o -> o.getKeywordList().contains(keyword));
}

尝试替换:

list.stream().filter(o -> o.getKeywordList().equals(keyword)).findFirst().isPresent();

作者:

list.stream().filter(o -> o.getKeywordList().contains(keyword)).findFirst().isPresent();

或更短:

list.stream().anyMatch(o -> o.getKeywordList().contains(keyword));