Java 无法在流上调用筛选器方法
我在Oracel上做@JavaSE8教程时感到困惑 我在尝试使用filter筛选人员列表时,禁用了@Lambda表达式和集合。SearchCriteria中的Mine getCriteria()方法返回谓词,而筛选器接受谓词-错误在哪里 谢谢你帮助我 SearchCriteria.classJava 无法在流上调用筛选器方法,java,filter,lambda,predicate,Java,Filter,Lambda,Predicate,我在Oracel上做@JavaSE8教程时感到困惑 我在尝试使用filter筛选人员列表时,禁用了@Lambda表达式和集合。SearchCriteria中的Mine getCriteria()方法返回谓词,而筛选器接受谓词-错误在哪里 谢谢你帮助我 SearchCriteria.class private final Map<String, Predicate<Person>> searchMap = new HashMap<>(); priva
private final Map<String, Predicate<Person>> searchMap = new HashMap<>();
private SearchCriteria() {
super();
initSearchMap();
}
public static SearchCriteria getInstance() {
return new SearchCriteria();
}
private void initSearchMap() {
Predicate<Person> allDrivers = p -> p.getAge() >= 16;
Predicate< Person> allDraftees = p -> p.getAge() >= 18 && p.getAge() <= 25;
Predicate< Person> allPilots = p -> p.getAge() >= 23 && p.getAge() <= 65;
searchMap.put("allDrivers", allDrivers);
searchMap.put("allDraftees", allDraftees);
searchMap.put("allPilots", allPilots);
}
public Predicate<Person> getCriteria(String predicateName) {
Predicate<Person> result;
result = searchMap.get(predicateName);
// result = searchMap.get(predicateName);
// Optional<Predicate<Person>> optPredicatePerson =
// Optional.of(searchMap.get(predicateName));
// if (optPredicatePerson.isPresent()) {
// result = optPredicatePerson.get();
// }
// Predicate<Person> z = p -> false;
//
// optPredicatePerson.orElse(z);
// return result;
if (result == null) {
System.out.println("Search Criteria not found... ");
System.exit(1);
}
return result;
}
private final Map searchMap=new HashMap();
私人搜索标准(){
超级();
initSearchMap();
}
公共静态SearchCriteria getInstance(){
返回新的搜索条件();
}
私有void initSearchMap(){
谓词allDrivers=p->p.getAge()>=16;
谓词allDraftees=p->p.getAge()>=18&&p.getAge()allPilots=p->p.getAge()>=23&&p.getAge()false;
//
//奥雷尔斯(z);
//返回结果;
如果(结果==null){
System.out.println(“未找到搜索条件…”);
系统出口(1);
}
返回结果;
}
公共静态void main(字符串…参数){
List pl=Person.createShortList();
SearchCriteria search=SearchCriteria.getInstance();
System.out.println(“\n==西部飞行员电话列表==”;
pl.stream().filter(search.getCriteria(“allPilots”)).forEach(Person::printWesterName);
}我觉得不错-问题是什么?我得到了一个错误,表示方法过滤器(谓词
List<Person> pl = Person.createShortList();
SearchCriteria search = SearchCriteria.getInstance();
System.out.println("\n=== Western Pilot Phone List ===");
pl.stream().filter(search.getCriteria("allPilots")).forEach(Person::printWesterName);