首页 > 解决方案 > 过滤一个可选的> 在 java8 中

问题描述

我正在尝试Optional<List<Object>>在 Java8 中过滤一个。在下面的示例中,我尝试过滤列表,而不收集完整列表(玩家)。这可能吗?

public List<Player> getPlayers(int age, Team team) {
    Optional.ofNullable(team).map(Team::getPlayers); 
    // needs to filter players older than 20 years, without collecting it as a list.
}

class Team {

    String name;
    List<Player> players;
    public String getName() {
        return name;
    }

    public void setName(final String name) {
        this.name = name;
    }

    public List<Player> getPlayers() {
        return players;
    }

    public void setPlayers(final List<Player> players) {
        this.players = players;
    }

}


class Player {

    String playerName;
    String age;

    public String getPlayerName() {
        return playerName;
    }

    public void setPlayerName(final String playerName) {
        this.playerName = playerName;
    }

    public String getAge() {
        return age;
    }

    public void setAge(final String age) {
        this.age = age;
    }
}

标签: javajava-8java-stream

解决方案


随着方法的更新签名,您似乎正在寻找的是:

public List<Player> getPlayers(Team team, int age) {
    return Optional.ofNullable(team).map(Team::getPlayers)
            .orElse(Collections.emptyList())
            .stream()
            .filter(a -> Integer.parseInt(a.getAge()) > 20)
            .collect(Collectors.toList());
}

推荐阅读