我正在尝试通过应用过滤器获得最高价值
我有一个包含团队对象和卡片列表的对象。
所以我需要从纸牌重量属性中的纸牌列表中获得最高的值,其中队伍为A,然后返回玩家。
public class Player {
private String name;
private List<Card> cards;
private Team team;
// getters and setters
}
public class Team {
private int id;
private int points;
// getters and setters
}
public class Card {
private int weightCard;
// getters and setters
}
我试图执行的代码
int maxPointsTeamA = players
.stream()
.filter( x -> x.getTeam().equals(teamA))
.map(n -> n.getCards()
.stream()
.map( c -> c.getWeigthCard()).max(Comparator.naturalOrder()));
玩家是玩家列表(4位玩家)
错误:
Type mismatch: cannot convert from Stream<Object> to int
请帮我,这是为了学术工作
最佳答案
对于初学者,将两个map
调用都替换为mapToInt
。然后,您不需要Comparator.naturalOrder()
。
其次,您的第一个地图调用包含以下lambda:n -> n.getCards().stream().map(c -> c.getWeightCard())
。
这会将单个“ n”(无论可能是什么)转换为任何权重卡返回的流(这不是您粘贴的代码)。 map
的目的是将一件事变成另一件事,而不是一堆东西。您可以使用flatmap
代替,因此大概是先将flatMap映射到一串纸牌,然后通过weightcard函数将其映射到int,然后再进行max。
放在一起:
int maxPointsTeamA = players
.stream()
.filter(x -> x.getTeam().equals(teamA))
.flatMap(n -> n.getCards().stream())
.mapToInt(c -> c.getWeightCard())
.max()
.orElse(0);
编辑:啊,是的,我忘了max()返回OptionalInt;。固定。
关于java - Java列表中的最大值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60698922/