开发者社区> 问答> 正文

Java列表中的最大值

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

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

展开
收起
montos 2020-03-23 14:42:05 425 0
1 条回答
写回答
取消 提交回答
  • 对于初学者,将您的两个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
    
    2020-03-23 14:42:42
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载