[英]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.