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

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

有一个 ArrayList 存储整数值。假设 arrayList 存储的值是:10, 20, 30, 40, 50.

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

Collections.max(arrayList); 

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

您可以执行以下操作:

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 方法提取列表中要计算最大值的部分。

source可以读到:

List subList(int fromIndex, int toIndex)

Returns a view of the portion of this list between the specified fromIndex, inclusive, and toIndex, exclusive. (...)

您可以在方法中创建另一个数组列表并存储您想要的所有值,这样您就可以从原始数组列表中添加 10、20、30,停止添加,然后使用3 个元素。

希望对您有所帮助!

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

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

通常 Collection 没有 subList,因为并非所有集合都是列表,而且对于某些集合而言,“前 N 个元素”没有多大意义,因为他们不维护任何有意义的顺序(例如 HashSet)。

您可以获取任何 Collection 的前三个元素(以集合提供的任何顺序),方法是使用限制对其进行迭代。最好为此使用流:

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

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

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