加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

使用多个过滤器的Java Stream搜索列表

发布时间:2020-12-15 01:09:54 所属栏目:Java 来源:网络整理
导读:我有一个Java对象列表(假设getter和setter): Record(String name,String part,String value); 如果列表包含某个名称值和某个部分值,我需要返回一个布尔值. 我让它一次为一个过滤器工作: //assume records are added to this listList 但是我得到错误对于此

我有一个Java对象列表(假设getter和setter):

Record(String name,String part,String value);

如果列表包含某个名称值和某个部分值,我需要返回一个布尔值.

我让它一次为一个过滤器工作:

//assume records are added to this list
List

但是我得到错误对于此尝试,无法从Record :: getPart上的静态上下文引用非静态方法:

masterList.stream().map(Record::getName).filter(record.getName()::equals).map(Record::getPart).filter(record.getPart()::equals).findFirst().isPresent();
最佳答案
您尝试做的事情是不可能的,即当您执行map(Record :: getName)时,您有一个Stream< String>其中所有字符串都是记录名称,之后的任何链接方法调用仅基于记录名称.

而只是使用一个过滤器:

boolean check = masterList.stream()
                           .filter(s -> s.getName().equals(record.getName()) &&
                                        s.getPart().equals(record.getPart()))
                           .findFirst().isPresent();

或者更好地使用anyMatch

boolean check = masterList.stream()
                         .anyMatch(s -> s.getName().equals(record.getName()) &&
                                    s.getPart().equals(record.getPart()));

编辑:

如果它可以是一个匹配名称的记录,另一个记录匹配部分?

然后,您可以将所有记录名称和部分收集到一个集合中,如下所示:

Set

然后做:

boolean result = container.contains(record.getName()) && 
                 container.contains(record.getPart()) ;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读