过滤器的java 8流中的if-else逻辑问题

Rom*_*hoo 0 java java-8 java-stream

题:

举一个ArrayListPlayer秒- List<Player>。以一个Player与POJO String Nameint ageint 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 + "]";
    }
}
Run Code Online (Sandbox Code Playgroud)

逻辑:

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);
}
Run Code Online (Sandbox Code Playgroud)

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

Eld*_* B. 5

使用时collect(Collection.toList())返回的列表永远不会为空。如果存在没有参数匹配的过滤器,则列表为空。您应该将您的条件更改为filtered.isEmpty()

但是请注意,该列表在流中可以为空。