首页 > 解决方案 > 使用 lambdas 返回列表中的匹配元素

问题描述

这很好用:

// ActorDao
public Optional<Actor> read(long id) {
    return Optional.ofNullable(actors.get((int) id));
}

public List<Actor> readAll() {
    // Return a list of actors from db  
}



// Demo
public static Actor getActor(String firstName, String lastName) {
    Dao<Actor> actorDao = new ActorDao();
    long id = 0;
    for (Actor actor : actorDao.readAll()) {
        if (firstName.equalsIgnoreCase(actor.getFirstName()) && lastName.equalsIgnoreCase(actor.getLastName())) {
            id = actor.getId() - 1; // actor_id in db starts at 1
            return actorDao.read(id).get();
        }
    }
    return null;
}

Java8+ 中更优雅的方式是什么?

标签: javalambda

解决方案


return actorDao.readAll()
        .stream()
        .filter(actor -> firstName.equalsIgnoreCase(actor.getFirstName()))
        .filter(actor -> lastName.equalsIgnoreCase(actor.getLastName()))
        .map(actor -> actorDao.read(actor.getId() - 1).get())
        .findFirst()
        .orElse(null);

推荐阅读