else逻辑问题

3duebb1j  于 2021-07-05  发布在  Java
关注(0)|答案(3)|浏览(238)

这个问题在这里已经有答案了

java的stream.collect()能否返回null(6个答案)
4个月前关门了。
问题:
给一个 ArrayListPlayer s- List<Player> . 拿一个 Player pojo与 String Name , int age ,和 int runs . 使用创建列表 list.add .
找到第一个年龄小于30岁,跑步超过5000的玩家,打印名字。或者打印“没有入选世界杯的球员”
pojo类:

public class Player {
    String name;
    int age;
    int runs;

    public Player(String name, int age, int runs) {
        super();
        this.name = name;
        this.age = age;
        this.runs = runs;
    }

    @Override
    public String toString() {
        return "Player [name=" + name + "]";
    }
}

逻辑:

List<Player> players = Arrays.asList(
    new Player("Sachin",45,10252),
    new Player("Virat",29,7000),
    new Player("Dhoni",38,4000),
    new Player("Yuvraj",29,5500)
);

List<Player> filtered = players.stream()
    .filter(i -> i.runs > 5000 && i.age > 50)
    .collect(Collectors.toList());

if(filtered == null) {
    System.out.println("No Player selected for World Cup");
} else {
    System.out.println(filtered);
}

这里if部分没有执行,else在有效条件下运行良好

bqf10yzr

bqf10yzr1#

这样做有效:

List<Player> players = Arrays.asList(new Player("Sachin", 45, 10252), new Player("Virat", 29, 7000), new Player("Dhoni", 38, 4000),
            new Player("Viraaat", 28, 7000), new Player("Yuvraj", 29, 5500));
    List<Player> filtered = players.stream().filter(i -> i.runs > 5000 && i.age < 30).collect(Collectors.toList());
    if (filtered.isEmpty())
        System.out.println("No Player selected for World Cup");
    else
        System.out.println(filtered.get(0));
2lpgd968

2lpgd9682#

这个 collect() 语句将返回数组对象。必须检查该数组是否为空。
另外,如果你喜欢,你可以使用 .anyMatch() 语句来获取布尔值,该布尔值与 filter() .

List<Player> players = Arrays.asList(
    new Player("Sachin",45,10252),
    new Player("Virat",29,7000),
    new Player("Dhoni",38,4000),
    new Player("Yuvraj",29,5500)
);

boolean hasPlayers = players.stream().anyMatch(i -> i.runs > 5000 && i.age > 50);
if(!hasPlayers) {
    System.out.println("No Player selected for World Cup");
}
sqxo8psd

sqxo8psd3#

使用时 collect(Collection.toList()) 返回的列表从不为空。如果存在没有参数匹配的筛选器,则列表为空。你应该把你的情况改成 filtered.isEmpty() .
但是请注意,列表在流中可以为空。

相关问题