【问题标题】:Java 8 find max [duplicate]Java 8找到最大值[重复]
【发布时间】:2015-02-18 15:21:52
【问题描述】:

我使用max() 来查找列表中的最大值,但下面的代码返回4,尽管最大值是90

List<Integer> list = new ArrayList<>(Arrays.asList(4,12,19,10,90,30,60,17,90));
System.out.println(list.stream().max(Integer::max).get());

【问题讨论】:

    标签: java java-8


    【解决方案1】:

    Stream#max(Comparator) 采用Comparator。您需要使用Integer#compare(int, int) 作为比较函数。

    list.stream().max(Integer::compare).get()
    

    您提供Integer#max(int, int) 作为Comparator#compare(int, int) 的实现。该方法不符合Comparator#compare 的要求。它不是返回指示哪个最大的值,而是返回最大的值。

    【讨论】:

    • 您也可以使用list.stream().max(Comparator.naturalOrder()).get()
    【解决方案2】:

    你需要在intStream上调用map

    System.out.println(list.stream().mapToInt(Integer::intValue).max().getAsInt());

    目前,您的代码仅返回列表中的第一个值,即 4 在您的情况下

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-22
      • 2023-03-18
      • 2015-11-26
      • 2011-07-11
      • 2013-11-11
      • 1970-01-01
      • 2018-08-22
      • 2020-05-03
      相关资源
      最近更新 更多