在Java和return中将两个列表元素与stream进行比较

在Java和return中将两个列表元素与stream进行比较,java,list,filter,compare,java-stream,Java,List,Filter,Compare,Java Stream,我有一个包含公司对象的列表 列出公司列表 每个公司都有一个返回公司名称的getName()方法 List companyslist中有几家公司,我想将此列表与包含公司名称的字符串列表进行比较 这是我的比较表 List searchList=Arrays.asList(“abc”、“xyz”) 我有我的方法,它获取公司和流,并用DB中的一些条件对其进行过滤,我想添加另一个过滤器,它将返回与searchList中的字符串相等的公司 所以基本上,我们的想法是将companiesList中的每个元素与g

我有一个包含公司对象的列表

列出公司列表

每个公司都有一个返回公司名称的
getName()
方法

List companyslist
中有几家公司,我想将此列表与包含公司名称的字符串列表进行比较

这是我的比较表

List searchList=Arrays.asList(“abc”、“xyz”)

我有我的方法,它获取公司和流,并用DB中的一些条件对其进行过滤,我想添加另一个过滤器,它将返回与searchList中的字符串相等的公司

所以基本上,我们的想法是将companiesList中的每个元素与getName()进行比较,并检查searchList中是否存在这些元素

public List getcompanys(字符串国家/地区、列表搜索列表、字符串版本){
列表结果=countriesByCountryCache.getUnchecked(国家)
.stream()
.filter(s->version.compareTo(s.getVersion())>=0)
//为了对每个元素进行类似的筛选,我想比较element.getName()并检查它是否存在于searchList中并收集它
.collect(Collectors.toList());
返回结果;
}
我知道它已经被问了很多次,有很多例子,但我找不到一个合适的,正确的解决办法,工作。提前谢谢

public List getcompanys(字符串国家/地区、列表搜索列表、字符串版本){
public List<Company> getCompanies(String country, List<String> searchList, String version) {

List<Company> result = countriesByCountryCache.getUnchecked(country)
.stream()
.filter(s -> version.compareTo(s.getVersion()) >= 0 && searchList.contains(s.getName())
.collect(Collectors.toList());

return result;
}
列表结果=countriesByCountryCache.getUnchecked(国家) .stream() .filter(s->version.compareTo(s.getVersion())>=0&&searchList.contains(s.getName()) .collect(Collectors.toList()); 返回结果; }
请检查上述代码是否有效。

公共列表GetCompanys(字符串国家/地区,列表搜索列表,字符串版本){
列表结果=countriesByCountryCache.getUnchecked(国家)
.stream()
.filter(s->version.compareTo(s.getVersion())>=0&&searchList.contains(s.getName())
.collect(Collectors.toList());
返回结果;
}

请检查上述代码是否有效。

您只需在
.filter()
中添加另一个条件,即可在筛选版本后仅返回
搜索列表中存在的结果

searchList
转换为HashSet稍微好一点,因为这样可以将搜索公司的复杂度从
O(n)
降低到
O(1)
,并且还可以删除可能存在的任何重复值。 最好是传入哈希集而不是列表(如果您可以控制接口设计)

下面是一个片段,我首先将
搜索列表
转换为一个集合,然后在
.filter()
中添加一个新条件,以仅返回
搜索列表
中存在的公司

public List getcompanys(字符串国家/地区、列表搜索列表、字符串版本){
//将给定的搜索列表转换为集合
最终集searchQueries=新哈希集(searchList);
列表结果=countriesByCountryCache.getUnchecked(国家)
.stream()
.filter(s->version.compareTo(s.getVersion())>=0&&searchQueries.contains(s.getName()))
.collect(Collectors.toList());
返回结果;
}

您只需在
.filter()
中添加另一个条件,即可在筛选版本后仅返回
搜索列表中存在的结果

searchList
转换为HashSet稍微好一点,因为这样可以将搜索公司的复杂度从
O(n)
降低到
O(1)
,并且还可以删除可能存在的任何重复值。 最好是传入哈希集而不是列表(如果您可以控制接口设计)

下面是一个片段,我首先将
搜索列表
转换为一个集合,然后在
.filter()
中添加一个新条件,以仅返回
搜索列表
中存在的公司

public List getcompanys(字符串国家/地区、列表搜索列表、字符串版本){
//将给定的搜索列表转换为集合
最终集searchQueries=新哈希集(searchList);
列表结果=countriesByCountryCache.getUnchecked(国家)
.stream()
.filter(s->version.compareTo(s.getVersion())>=0&&searchQueries.contains(s.getName()))
.collect(Collectors.toList());
返回结果;
}

添加一个过滤器/编辑流中的现有过滤器,该过滤器基本上在每次迭代的搜索列表中查找countryName是否存在

   List<Company> result = 
       countriesByCountryCache.getUnchecked(country)
            .stream()
            //your filters...
            .filter(s -> searchList.contains(s.getName())
            .collect(Collectors.toList());
            return result;
列表结果=
countriesByCountryCache.getUnchecked(国家/地区)
.stream()
//你的过滤器。。。
.filter->searchList.contains(s.getName())
.collect(Collectors.toList());
返回结果;

添加一个过滤器/编辑流中的现有过滤器,该过滤器基本上在每次迭代的搜索列表中查找countryName是否存在

   List<Company> result = 
       countriesByCountryCache.getUnchecked(country)
            .stream()
            //your filters...
            .filter(s -> searchList.contains(s.getName())
            .collect(Collectors.toList());
            return result;
列表结果=
countriesByCountryCache.getUnchecked(国家/地区)
.stream()
//你的过滤器。。。
.filter->searchList.contains(s.getName())
.collect(Collectors.toList());
返回结果;

请不要只发布代码作为答案,还要解释代码的作用以及它是如何解决问题的。带有解释的答案通常更有用、质量更好,并且更有可能吸引更多的投票。您仍然可以编辑答案以添加一些解释-只有代码的答案往往是无效的请不要只发布代码作为答案,还要解释代码的作用以及它是如何解决问题的。带有解释的答案通常更有用、质量更好,并且更有可能吸引更多的选票。您仍然可以编辑答案以添加一些解释-仅代码的答案往往被删除预计起飞时间。