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