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

问题描述

您可以通过以下方式实现它:

  • 遍历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流方法从列表中获取最大值。

结构如下:

  • 我读取了一个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()。

提前谢谢你的帮助!

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”