Java List.contains(ArrayList 字段值等于x)

问题描述 投票:1回答:1

使用下面的代码,我可以检查对象的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。

[当前,Eclipse引发警告:Unlikely argument type for equals(): String seems to be unrelated to ArrayList<String>(因为关键字是一个字符串,并且getKeywordList()返回ArrayList<String>

谢谢!

java list search contains
1个回答
1
投票
您可以简单地使用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)); }


1
投票
尝试替换:

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

© www.soinside.com 2019 - 2024. All rights reserved.