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