Kok*_*fuu 2 java methods max java-8 java-stream
我想使用java 8流方法从列表中获取最大值.
结构如下:
Round.Round对象都存储在一个ArrayList被调用的中arrRoundRound对象都有一个字段:List<Hit> hitsHit由2个字段组成:int numberOfGames和int prizeAmountpublic class Round{
private List<Hits> hits;
}
public class Hits{
private int numberOfGames;
private int prizeAmount;
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是迭代所有元素arrRound,获取他们的命中字段的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());
});
}
}
Run Code Online (Sandbox Code Playgroud)
而且我无法在声明的末尾调用max().
提前谢谢你的帮助!
你可以通过这种方式实现它:
Round的listRound对象变为它List<Hit> hits,flatMap从去Stream<List<Hits>>到Stream<Hits>Hits到它的prizeAmount领域maxif存在-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
Run Code Online (Sandbox Code Playgroud)
与班级lambda和map + flatMap一个:
int maxPrize = arrRoundarrRound.stream()
.flatMap(round -> round.getHits().stream())
.mapToInt(hits -> hits.getPrizeAmount())
.max()
.orElse(-1);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1288 次 |
| 最近记录: |