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

前端之家收集整理的这篇文章主要介绍了使用多个过滤器的Java Stream搜索列表前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个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()) ;

猜你在找的Java相关文章