Java 我们可以提取流中的主要对象吗
我有一个Java 我们可以提取流中的主要对象吗,java,java-8,java-stream,Java,Java 8,Java Stream,我有一个footballsteam类,包含Footballer类。如果footballsteam包含具有特定id的footballsteam,则可以使用流从足球队列表中获取footballsteam。是否可以使用流执行以下操作。i、 e同时获得目标球员和目标球员 FootballTeam targetTeam = null; Footballer targetFootballer = null; for(FootballTeam team : list.getFootballTeams()){
footballsteam
类,包含Footballer
类。如果footballsteam
包含具有特定id
的footballsteam
,则可以使用流从足球队列表中获取footballsteam
。是否可以使用流执行以下操作。i、 e同时获得目标球员和目标球员
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);
Map.Entry target=list.getFootballTeams()
.stream()
.flatMap(团队->团队.getFootballers()
.stream()
.filter(f->f.getId()==1)
.map(f->newAbstractMap.SimpleImmutableEntry(team,f)))
.findFirst()
.orElse(空);
由于您可能希望对这些值执行后续操作,因此可以避免将结果存储在变量中,并直接应用该操作,例如
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
});
list.getfootballsteams()
.stream()
.flatMap(团队->团队.getFootballers()
.stream()
.filter(f->f.getId()==1)
.map(f->newAbstractMap.SimpleImmutableEntry(team,f)))
.findFirst()
.如果存在(e->{
足球队targettam=e.getKey();
足球运动员目标足球运动员=e.getValue();
//行动起来
});
在这里,仅当找到匹配项并且不需要显式代码处理缺少的值时,才会执行该操作。在第一个示例中,
.orElse(null)
表示如果没有找到匹配项,目标
应该是null
,因此您以后必须测试null
。当条件if(f.getId()==1)时,您是否希望检索第一个足球队
和足球运动员
满足还是最后一个?不可能,因为不能在lambdas中使用非最终变量(targetFootballer)。如果是最终变量,该怎么办。是的,这个条件就是id@user3310115我的问题是,您是否希望在满足条件后立即停止迭代,然后检索足球队
和足球运动员
?我认为您在如果
条件中缺少第二个中断
,对吗?