我正在尝试通过应用过滤器获得最高价值
我有一个包含团队对象和卡片列表的对象。所以我需要从纸牌重量属性中的纸牌列表中获得最高的值,其中队伍为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`
请帮我,这是为了学术工作
问题来源:Stack Overflow
对于初学者,将您的两个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;。固定。
回答来源:Stack Overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。