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));
使用下面的代码我可以检查 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));