Raj*_*jan 1 java reduce mapreduce collect java-stream
我有一个整数列表
List<Integer> lst = new ArrayList<>();
lst.add(10);
lst.add(15);
lst.add(16);
lst.add(8);
lst.add(100);
lst.add(1);
lst.add(40);
Run Code Online (Sandbox Code Playgroud)
如何编写代码以便我可以从列表中获取前 5 个最大元素,即100, 40, 16, 15, 10?
我尝试过使用 Java 流 API:
Integer var = lst.stream().max(Integer::compare).get();
Run Code Online (Sandbox Code Playgroud)
但只得到一个值元素。
我尝试过使用Java Stream API,但只得到一个值,
Integer var = lst.stream().max(Integer::compare).get();
这将为您提供该列表的最大值。要获得前 5 名,您必须执行以下操作:
lst.stream()
.sorted(Comparator.reverseOrder())
.limit(5)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
排序的方法将按升序排序,如下所示:
sorted() 返回一个由该流的元素组成的流,按自然顺序排序。
但是,我们可以使用sorted(Comparator<? super T> comparator)它:
返回一个由该流的元素组成的流,根据提供的比较器进行排序。
因此,您需要通过Comparator.reverseOrder()来按降序排序。将从limit(5)流中提取前 5 个元素。
更通用的方法:
private static void printTop(Collection<Integer> col, int top) {
List<Integer> collect = col.stream().sorted(Comparator.reverseOrder()).limit(top).collect(Collectors.toList());
System.out.println(collect);
}
Run Code Online (Sandbox Code Playgroud)
一个运行的例子:
public static void main(String []args){
List<Integer> lst = List.of(10, 15, 16, 8, 100, 1, 40);
printTop(lst, 5);
}
private static void printTop(Collection<Integer> col, int top) {
List<Integer> collect = col.stream().sorted(Comparator.reverseOrder()).limit(top).collect(Collectors.toList());
System.out.println(collect);
}
Run Code Online (Sandbox Code Playgroud)
输出:
[100, 40, 16, 15, 10]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7499 次 |
| 最近记录: |