gpt4 book ai didi

java - 使用 Java 8 流方法获取最大值

转载 作者:行者123 更新时间:2023-12-04 21:28:53 24 4
gpt4 key购买 nike

我想使用 Java 8 流方法从列表中获取最大值。

结构如下:

  • 我读取一个 csv 文件并将每一行的数据存储在类型为 Round 的单独对象中.
  • 所有这些 Round对象存储在 ArrayList 中称为 arrRound
  • 全部Round对象有一个字段:List<Hit> hits
  • 一个Hit由 2 个字段组成:int numberOfGamesint prizeAmount
public class Round{
private List<Hits> hits;
}
public class Hits{
private int numberOfGames;
private int prizeAmount;
}

我想做的是遍历 arrRound 的所有元素, 获取他们的 hits 字段的 getPrizeAmount()方法并充分利用它。我开始如下但似乎无法做到:

public class Main(){
public void main(String[]args){
List<Round> arrRound = getRoundFromCSV();
int maxPrize = arrRound.stream()
.forEach(round -> {
round.getHits()
.forEach(hit -> hit.getPrizeAmount());
});
}
}

而且我无法在语句末尾调用 max()。

提前感谢您的帮助!

最佳答案

你可以通过这种方式实现:

  • 遍历 Roundlist
  • Round 更改反对其 List<Hit> hits ,
  • 使用flatMapStream<List<Hits>>Stream<Hits>
  • Hits 更改到它的prizeAmount领域
  • 获取 max如果存在
  • 如果没有最大值(比如如果列表为空或其他)返回 -1

所以一个解决方案使用Method reference

int maxPrize = arrRoundarrRound.stream()                      // Stream<Round>
.map(Round::getHits) // Stream<List<Hits>>
.flatMap(List::stream) // Stream<Hits>
.mapToInt(Hit::getPrizeAmount) // IntStream
.max() // OptionalInt
.orElse(-1); // int

与类lambdamap + flatMap一:

int maxPrize = arrRoundarrRound.stream()    
.flatMap(round -> round.getHits().stream())
.mapToInt(hits -> hits.getPrizeAmount())
.max()
.orElse(-1);

关于java - 使用 Java 8 流方法获取最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48608983/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com