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

问题描述

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

  • 遍历Roundlist
  • Round对象更改为List<Hit> hits
  • 使用flatMap从去Stream<List<Hits>>Stream<Hits>
  • 从转换Hits到其prizeAmount领域
  • 得到max如果存在
  • 如果没有最大值(如列表为空或其他),则返回 -1

所以使用 Method reference

  1. int maxPrize = arrRoundarrRound.stream() // Stream<Round>
  2. .map(Round::getHits) // Stream<List<Hits>>
  3. .flatMap(List::stream) // Stream<Hits>
  4. .mapToInt(Hit::getPrizeAmount) // IntStream
  5. .max() // OptionalInt
  6. .orElse(-1); // int

带班lambdamap + flatMap一个:

  1. int maxPrize = arrRoundarrRound.stream()
  2. .flatMap(round -> round.getHits().stream())
  3. .mapToInt(hits -> hits.getPrizeAmount())
  4. .max()
  5. .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()方法,并从中获取最大价值。我从以下步骤开始,但似乎无法做到:

  1. public class Main(){
  2. public void main(String[]args){
  3. List<Round> arrRound = getRoundFromCSV();
  4. int maxPrize = arrRound.stream()
  5. .forEach(round -> {
  6. round.getHits()
  7. .forEach(hit -> hit.getPrizeAmount());
  8. });
  9. }
  10. }

而且我无法在语句末尾调用max()。

提前谢谢你的帮助!

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

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