java - 用于过滤器的 Java 8 流中的 if-else 逻辑问题
问题描述
问题:
给一个ArrayList
s Player
- 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 在有效条件下运行良好
解决方案
使用时collect(Collection.toList())
返回的列表永远不会为空。如果存在没有参数匹配的过滤器,则列表为空。您应该将您的条件更改为filtered.isEmpty()
.
但是请注意,列表在流中可以为空。
推荐阅读
- android - 在没有实时数据的情况下使用 ViewModel 可以吗
- matlab - 如果我知道每个点的函数值,则在 MATLAB 中进行离散双积分
- javascript - 在通过 HTTP 相互通信的两个本地进程的系统中,如何在整个会话中强制使用相同的连接?
- magento - 在 Magento2 主页中显示 Wordpress 2 博客?
- c# - EscapeDataString 不能为空
- django - Django相关抽象类管理器
- dynamics-crm - 以编程方式更改 EnforceStateTransitions EntityMetadata
- laravel - 不允许更新 laravel 中的属性
- virtualization - Virtualizazion: vSphere compatibility with AMD motherboards and graphic card
- c++ - 为什么我需要显式编写'auto'关键字?