我正在尝试通过应用过滤器获得最高价值

我有一个包含团队对象和卡片列表的对象。
所以我需要从纸牌重量属性中的纸牌列表中获得最高的值,其中队伍为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/

10-11 20:49
查看更多