如何使用java流从列表中获取前5个最大值

如何使用java流从列表中获取前5个最大值,java,mapreduce,java-stream,reduce,collect,Java,Mapreduce,Java Stream,Reduce,Collect,我有一个整数列表 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); 但是只获取一个value元素。您可以对列表进行排序,然后根据实现可比较方法的方式,弹出最后5个元素或前5个元素。List lst=new ArrayList(); List<Integer&g

我有一个整数列表

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);

但是只获取一个value元素。

您可以对列表进行排序,然后根据实现可比较方法的方式,弹出最后5个元素或前5个元素。

List lst=new ArrayList();
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);
List<Integer> lst1 = lst.stream().sorted(Comparator.reverseOrder()).limit(5).collect(Collectors.toList());
System.out.println(lst1);
第1条增补(10); 第1条增补(15); 第1条增补(16); 第1条增补(8); 第1条增补(100); 第1条增补(1); 第1条增补(40); List lst1=lst.stream().sorted(Comparator.reverseOrder()).limit(5.collect(Collectors.toList()); 系统输出打印项次(lst1);
这可以帮助您获得前5个最大元素

我尝试过使用Java stream API,但只得到一个值

Integer var=lst.stream().max(Integer::compare.get()

这将获得该列表的最大值。要获得前5名,您必须执行以下操作:

lst.stream()
   .sorted(Comparator.reverseOrder())
   .limit(5)
   .collect(Collectors.toList());
该方法将按升序排序,如下所示:

sorted()返回由该流的元素组成的流, 按自然顺序分类

但是,我们可以使用
排序(比较器以自然顺序获得5个最大值
这两种方法都适用于列表大小<5且无例外情况

带着一个lambda(如OP所需)

int[]n={0};
列表rslt=lst.stream().sorted().dropWhile(
i->n[0]+
使用收集方法

lst.sort( Integer::compare );
List<Integer> rslt = lst.subList( Math.max(0, lst.size() - 5), lst.size() );
lst.sort(整数::比较);
List rslt=lst.subList(Math.max(0,lst.size()-5),lst.size());
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);
}
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);
}
[100, 40, 16, 15, 10]
int[] n = {0};
List<Integer> rslt = lst.stream().sorted().dropWhile(
  i -> n[0]++ < Math.max(0, lst.size() - 5) ).collect( toList() );
lst.sort( Integer::compare );
List<Integer> rslt = lst.subList( Math.max(0, lst.size() - 5), lst.size() );