Java 无法在流上调用筛选器方法

Java 无法在流上调用筛选器方法,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

我在Oracel上做@JavaSE8教程时感到困惑

我在尝试使用filter筛选人员列表时,禁用了@Lambda表达式和集合。SearchCriteria中的Mine getCriteria()方法返回谓词,而筛选器接受谓词-错误在哪里

谢谢你帮助我

SearchCriteria.class

    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);