如何解决如何从ArrayList的前N个值中获取最大值?
有一个 ArrayList
存储整数值。假设 arrayList 存储的值是:10,20,30,40,50
.
我知道如何找到集合的最大值。我将不得不这样做:
Collections.max(arrayList);
但是我应该怎么做才能找到集合的前 3 个元素中的最大值?所以在这个例子中,它是 30。有集合的 sublist 函数吗?
解决方法
List
有一个您可以使用的 subList 方法:
Collections.max(arrayList.subList(0,3))
一般来说,subList
没有 Collection
,因为并非所有集合都是列表,对于某些集合,“前 N 个元素”没有多大意义,因为它们没有'不保持任何有意义的顺序(例如 HashSet
)。
您可以获取任何 Collection
的前三个元素(以集合提供的任何顺序),通过限制迭代它。最好为此使用流:
yourCollection.stream().limit(3).collect(Collectors.toList());
或者您可以直接在流中找到您要查找的内容,而无需收集某些集合中的元素:
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 方法来提取要计算最大值的列表部分。
从 source 可以读到:
List subList(int fromIndex,int toIndex)
返回此列表中指定的 fromIndex、inclusive 和 toIndex 之间的部分的视图, 独家。 (...)
,您可以在方法中创建另一个数组列表并存储您想要的所有值,以便您可以从原始数组列表中添加 10、20、30,停止添加,然后找到具有 3 个元素的新数组列表的最大值.
希望这有帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。