使用下面的代码,我可以检查对象的List
是否包含与特定值匹配的字段。
public boolean containsName(final List<MyObject> list, final String name){
return list.stream().filter(o -> o.getName().equals(name)).findFirst().isPresent();
}
但是,这仅在o.getName()
返回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
返回关键字列表而不是单个String
。如果keyword
匹配这些关键字的[[ANY,则方法应返回true。
Unlikely argument type for equals(): String seems to be unrelated to ArrayList<String>
(因为关键字是一个字符串,并且getKeywordList()
返回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));