首页 > 解决方案 > 用于过滤器的 Java 8 流中的 if-else 逻辑问题

问题描述

问题:

给一个ArrayLists Player- List<Player>。使用、和进行PlayerPOJO 。使用.String Nameint ageint runslist.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 在有效条件下运行良好

标签: javajava-8java-stream

解决方案


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

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


推荐阅读