簡體   English   中英

篩選可選 <List<Object> &gt;在Java8中

[英]Filter an Optional<List<Object>> in java8

我正在嘗試在Java8中過濾Optional<List<Object>> 在下面的示例中,我嘗試過濾列表,而不收集完整列表(玩家)。 這可能嗎?

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

空列表是一個壞主意 最好只包含列表,但總是非空。 這樣,您不必一直檢查是否為null,您可以立即進行迭代。

如果這樣做,則可以直接調用stream() ,而無需執行任何此Optional業務:

team.getPlayers().stream()
    .filter(p -> p.getAge() > 20)

使用該方法的更新簽名,您似乎正在尋找的是:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM