问题描述
您可以通过以下方式实现它:
- 遍历
Round
的list
- 从
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
带班lambda
和map + flatMap
一个:
int maxPrize = arrRoundarrRound.stream()
.flatMap(round -> round.getHits().stream())
.mapToInt(hits -> hits.getPrizeAmount())
.max()
.orElse(-1);
解决方法
我想使用java 8流方法从列表中获取最大值。
结构如下:
- 我读取了一个csv文件,并将每一行的数据存储在一个单独的type对象中
Round
。 - 所有这些
Round
对象都存储在一个ArrayList
名为arrRound
- 所有
Round
对象都有一个字段:List<Hit> hits
-
a
Hit
包含2个字段:int numberOfGames
和int prizeAmount
public class Round{
private Listhits;
}
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()。
提前谢谢你的帮助!