繁体   English   中英

如何从 ArrayList 的前 N 个值中获取最大值?

[英]How to get maximum value from of the first N values of an ArrayList?

有一个ArrayList存储 integer 值。 假设 arrayList 存储的值为: 10, 20, 30, 40, 50

我知道如何找到集合的最大值。 我必须这样做:

Collections.max(arrayList); 

但是我应该怎么做才能找到集合的前 3 个元素中的最大值呢? 所以在这个例子中,它将是 30。collections 是否有子列表 function?

List有一个可以使用的subList方法:

Collections.max(arrayList.subList(0, 3))

Collection通常没有subList ,因为并非所有 collections 都是列表,并且对于某些人来说,“前 N 个元素”没有多大意义,因为它们不保持任何有意义的顺序(例如HashSet )。

您可以通过限制迭代来获取任何Collection的前三个元素(以集合提供的任何顺序)。 为此,最好使用 stream:

yourCollection.stream().limit(3).collect(Collectors.toList());

或者您可以直接在 stream 上找到您要查找的内容,而无需收集某些集合中的元素:

Optional<Integer> max = yourCollection.stream.limit(3).max(Comparator.naturalOrder());

您可以执行以下操作:

public static void main(String[] arg) {
    List<Integer> list = new ArrayList<>();
    list.add(10);
    list.add(20);
    list.add(30);
    list.add(40);
    list.add(50);
    System.out.println(Collections.max(list.subList(0, 3)));
}

正如ControlAltDel在评论中指出的那样,使用 subList 方法来提取要计算最大值的列表部分。

源代码可以阅读:

列表子列表(int fromIndex,int toIndex)

返回此列表在指定的 fromIndex(包括)和 toIndex(不包括)之间的部分的视图。 (...)

您可以在方法中创建另一个数组列表并存储您想要的所有值,以便您可以从原始数组列表中添加 10、20、30,停止添加,然后找到具有 3 个元素的新数组列表的最大值。

希望这有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM