这个问题在这里已经有答案了:
java的stream.collect()能否返回null(6个答案)
4个月前关门了。
问题:
给一个 ArrayList
的 Player
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在有效条件下运行良好
3条答案
按热度按时间bqf10yzr1#
这样做有效:
2lpgd9682#
这个
collect()
语句将返回数组对象。必须检查该数组是否为空。另外,如果你喜欢,你可以使用
.anyMatch()
语句来获取布尔值,该布尔值与filter()
.sqxo8psd3#
使用时
collect(Collection.toList())
返回的列表从不为空。如果存在没有参数匹配的筛选器,则列表为空。你应该把你的情况改成filtered.isEmpty()
.但是请注意,列表在流中可以为空。