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

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

结构如下:

  • 我读取了一个csv文件,并将每一行的数据存储在一个单独的type对象中Round
  • 所有这些Round对象都存储在一个ArrayList名为arrRound
  • 所有Round对象都有一个字段:List<Hit> hits
  • a Hit包含2个字段:int numberOfGamesint prizeAmount

    public class Round{

    private List 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
  • 使用flatMap从去Stream<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 8流方法获取最大值 的全部内容, 来源链接: utcz.com/qa/428778.html

回到顶部