我想使用java 8流方法从列表中获取最大值。
结构如下:
Round
ArrayList
arrRound
List<Hit> hits
a Hit包含2个字段:int numberOfGames和int prizeAmount
Hit
int numberOfGames
int prizeAmount
public class Round{ private List hits; } public class Hits{ private int numberOfGames; private int prizeAmount; }
我想做的是迭代的所有元素arrRound,获取hits字段的getPrizeAmount()方法,并从中获取最大价值。我从以下步骤开始,但似乎无法做到:
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()。
提前谢谢你的帮助!
您可以通过以下方式实现它:
list
flatMap
Stream<List<Hits>>
Stream<Hits>
Hits
prizeAmount
max
-1
所以使用 Method reference
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
带班lambda和map + flatMap一个:
lambda
map + flatMap
int maxPrize = arrRoundarrRound.stream() .flatMap(round -> round.getHits().stream()) .mapToInt(hits -> hits.getPrizeAmount()) .max() .orElse(-1);