gpt4 book ai didi

java - 我们可以提取流中的主要对象吗

转载 作者:搜寻专家 更新时间:2023-11-01 01:49:19 25 4
gpt4 key购买 nike

我有一个包含 Footballer 类的 FootballTeam 类。如果 FootballTeam 包含具有特定 id< 的 Footballer,则可以使用流从足球队列表中获取 FootballTeam/。是否可以使用流执行以下操作。即获取 targetFootballertargetTeam

FootballTeam targetTeam = null;
Footballer targetFootballer = null;

for(FootballTeam team : list.getFootballTeams()){
for(Footballer f : team.getFootballers()) {
if(f.getId() == 1){
targetFootballer = f;
break;
}
}
if(targetFootballer != null) {
targetTeam = team;
}
}

最佳答案

不要从循环的角度来考虑,而是要考虑您正在执行的高级操作,例如找到符合条件的第一个元素。表达这种操作的最大障碍是 Java 方法不能返回两个值。使用 Map.Entry 作为包含两个结果的对类型,您可以使用

Map.Entry<FootballTeam,Footballer> target = list.getFootballTeams()
.stream()
.flatMap(team -> team.getFootballers()
.stream()
.filter(f -> f.getId() == 1)
.map(f -> new AbstractMap.SimpleImmutableEntry<>(team, f)))
.findFirst()
.orElse(null);

由于您可能希望对这些值执行后续操作,因此您可以避免将结果存储在变量中并直接应用操作,例如

list.getFootballTeams()
.stream()
.flatMap(team -> team.getFootballers()
.stream()
.filter(f -> f.getId() == 1)
.map(f -> new AbstractMap.SimpleImmutableEntry<>(team, f)))
.findFirst()
.ifPresent(e -> {
FootballTeam targetTeam = e.getKey();
Footballer targetFootballer = e.getValue();
// do your action
});

这里,只有在找到匹配项时才会执行操作,您不需要显式代码来处理缺失值。在第一个示例中,.orElse(null) 表示如果未找到匹配项,则 target 应为 null,因此您必须测试稍后为 null

关于java - 我们可以提取流中的主要对象吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48156326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com