利用stream sorted进行降序排序

根据value值的大小进行降序排序,并进行截取。

public static void main(String[] args) {
  List<Map<String, Object>> list = Lists.newArrayList();
  Map<String, Object> map = Maps.newHashMap();
  map.put("id", 1);
  map.put("value", 20);
  list.add(map);
  map = Maps.newHashMap();
  map.put("id", 2);
  map.put("value", 80);
  list.add(map);
  map = Maps.newHashMap();
  map.put("id", 3);
  map.put("value", 21);
  list.add(map);
  map = Maps.newHashMap();
  map.put("id", 4);
  map.put("value", 28);
  list.add(map);
  System.out.println("原始数据:"+list);
  //根据value进行排序 得到升序排列
  list.sort(Comparator.comparing(h -> ConvertUtil.obj2Integer(h.get("value"))));
  //颠倒排序,变为降序排列
  Collections.reverse(list);
  //截取前3个
  System.out.println("结果"+list.subList(0, 3));
 }

使用1.8 stream处理

List<Map<String, Object>>result = list.stream().sorted((h1, h2) ->
//降序
ConvertUtil.obj2Integer(h2.get("value")).compareTo(ConvertUtil .obj2Integer(h1.get("value"))))
 //前3个
    .limit(3)
    //终止流
    .collect(Collectors.toList());
 System.out.println("流结果"+result );

运行结果:

原始数据:

[{id=1, value=20}, {id=2, value=80}, {id=3, value=21}, {id=4, value=28}]

结果

[{id=2, value=80}, {id=4, value=28}, {id=3, value=21}]

补充:Java8Stream流的sorted()排序===使用Comparator排序

sorted()方法排序,一个是Comparable(自然排序),一个是Comparator接口,像Integer、String等这些基本类型的包装类已经实现了Comparable接口,

Comparable接口======》java.lang包下的

方法CompareTo(Object o),除了基本类型包装类外,一些常用的pojo类要使用CompareTo(Object o)排序,就要实现Comparable接口,在pojo类里重写compareTo()方法

Comparator接口======》java.util包下的

方法compare(Object a,Object b)

关于Comparable和Comparator接口

Sorted排序一共有两种,自然排序和Comparator接口的排序,

使用sorted()排序

1、简单List<Integer> 排序=====》

package com.it.test;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class StreamTest {
 public static void main(String[] args) {
  List<Integer> integers = new ArrayList<>();
  integers.add(9);
  integers.add(2);
  integers.add(0);
  integers.add(4);
  integers.add(8);
  List<Integer> collect = integers.stream().sorted().collect(Collectors.toList()); //自然排序
 }
}

结果

2、简单List<String>排序

package com.it.test;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class StreamTest {
 public static void main(String[] args) {
  List<String> strings = new ArrayList<>();
  strings.add("aa");
  strings.add("b");
  strings.add("aac");
  strings.add("bb");
  strings.add("abb");
  List<String> collect1 = strings.stream().sorted().collect(Collectors.toList());
  System.out.println(collect1.toString());
 }
}

结果

3、复杂实体对象pojo排序

使用Comparator排序

Person.java

package com.it.pojo;
import java.util.Comparator;
import java.util.Objects;
@Data
@NoArgsConstructor
@ToString
public class Person {
 private String name;
 private Integer age;
}
 

test.java===>先只根据年龄排序,后先根据年龄排序,再根据姓名排序,都升序

package com.it.test;
import java.util.ArrayList;
import java.util.List;
import com.it.pojo.Person;
import java.util.Comparator;
import java.util.stream.Collectors;
public class StreamTest {
 public static void main(String[] args) {
  Person person1 = new Person();
  person1.setAge(21);
  person1.setName("21");

  Person person2 = new Person();
  person2.setAge(19);
  person2.setName("19");

  Person person3 = new Person();
  person3.setAge(19);
  person3.setName("20");

  Person person4 = new Person();
  person4.setAge(20);
  person4.setName("20");

  Person person5 = new Person();
  person5.setAge(19);
  person5.setName("18");

  List<Person> people = new ArrayList<>();
  people.add(person1);
  people.add(person2);
  people.add(person3);
  people.add(person4);
  people.add(person5);

  List<Person> collect1 = people.stream().sorted((Comparator.comparing(Person::getAge))).collect(Collectors.toList());//只根据年龄排序,升序
  System.out.println(collect2);

   List<Person> collect2 = people.stream().sorted((Comparator.comparing(Person::getAge)).reversed()).collect(Collectors.toList());//只根据年龄排序,降序
  System.out.println(collect2);

  List<Person> collect3 = people.stream().sorted((Comparator.comparing(Person::getAge)).thenComparing(Comparator.comparing(Person::getName))).collect(Collectors.toList());//先根据年龄进行排序,遇见相同的,然后根据姓名进行排序,都升序
  System.out.println(collect3);

   List<Person> collect4 = people.stream().sorted((Comparator.comparing(Person::getAge)).thenComparing(Comparator.comparing(Person::getName)).reversed()).collect(Collectors.toList());/先根据年龄进行排序,遇见相同的,然后根据姓名进行排序,降序【都降序】
  System.out.println(collect4);

  List<Person> collect5 = people.stream().sorted(Comparator.comparing(Person::getAge).reversed().thenComparing(Comparator.comparing(Person::getName)).reversed()).collect(Collectors.toList());//年龄升序,姓名降序
  System.out.println(collect5);

  List<Person> collect6 = people.stream().sorted(Comparator.comparing(Person::getAge).reversed().thenComparing(Comparator.comparing(Person::getName))).collect(Collectors.toList());//根据年龄降序,姓名升序
  System.out.println(collect6);
 }
}

结果

只根据年龄进行排序的,默认是升序

根据年龄降序

先根据年龄,后根据姓名排序的,默认都是升序

根据年龄和性别,先根据年龄,年龄相同根据性别,只在最后一个comparing上写reversed,两个排序都是降序【根据年龄降序,姓名降序】

根据年龄升序,年龄相同,根据姓名降序

总结

先这么着吧

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • Java8 使用 stream().sorted()对List集合进行排序的操作

    1.声明一个测试对象 import java.time.LocalDate; import java.util.List; import lombok.Data; @Data public class StudentInfo{ //名称 private String name; //性别 true男 false女 private Boolean gender; //年龄 private Integer age; //身高 private Double height; //出生日期 private

  • Java List的sort()方法改写compare()实现升序,降序,倒序的案例

    本文旨在通过重写Comparator接口的compare()方法实现对List的升序.降序.倒序排序. 首先明确一点: compare(Integer o1, Integer o2){}中,o1代表的是List容器中的后一个元素,o2代表的是List容器中的前一个元素! 通过以下例子可以清晰了解这一点: public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(); li

  • java 中List按照date排序的实现

    java 中List按照date排序的实现 今天开发需要对一个list进行排序,要求对里面的date类型的属性进行排序,不多说,直接上代码. Leavecalendar这个bean类里面有属性date: private Date Date; //有get/set方法: public Date getDate() { return Date; } public void setDate(Date lcDate) { this.Date = lcDate; } 排序我们要用到java里面的Colle

  • Java对List进行排序的两种实现方法

    前言 Java.util包中的List接口继承了Collection接口,用来存放对象集合,所以对这些对象进行排序的时候,要么让对象类自己实现同类对象的比较,要么借助比较器进行比较排序. 学生实体类,包含姓名和年龄属性,比较时先按姓名升序排序,如果姓名相同则按年龄升序排序. 第一种:实体类自己实现比较 (实现comparable接口:public interface Comparable<T> ,里面就一个方法声明:public int compareTo(T o); ) 示例代码: publ

  • 利用stream sorted进行降序排序

    根据value值的大小进行降序排序,并进行截取. public static void main(String[] args) { List<Map<String, Object>> list = Lists.newArrayList(); Map<String, Object> map = Maps.newHashMap(); map.put("id", 1); map.put("value", 20); list.add(ma

  • Arrays.sort如何实现降序排序

    目录 Arrays.sort实现降序排序 1.Collections的reverseOrder 2.利用Comparator接口复写compare Arrays.sort底层原理 概述 案例 总结 Arrays.sort实现降序排序 在调用Arrays.sort()对数组进行排序时,默认是升序排序的,如果想让数组降序排序,有下面两种方法: 1.Collections的reverseOrder import java.util.*;   public class Main {     public

  • php arsort 数组降序排序详细介绍

    arsort 对数组进行降序排序并保持索引关系. 基本语法 bool arsort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) 本函数对数组进行降序排序,数组的索引保持和单元的关联. arsort函数主要用于对那些单元顺序很重要的结合数组进行排序. 参数介绍: 参数 描述 array 必需.输入的数组. sort_flags 可选.规定如何排列数组的元素/项目.可能的值: 0 = SORT_REGULAR - 默认.把每一项按常规顺

  • 如何使用Collections.reverse对list集合进行降序排序

    目录 使用Collections.reverse对list集合进行降序排序 Collections.reverse原理 使用Collections.reverse对list集合进行降序排序 今天无意中搜了一下Collections.reverse这个方法,结果发现有些人对它的误解蛮深的.下面是一个有百万访问量博主写的,reverse可以对指定列表进行降序排序,可是自己输出的结果都不是降序. 确实,使用Collections.reverse结合一定方法可以实现对list集合降序排序,但是直接使用C

  • DataGridView实现点击列头升序和降序排序

    DataGridView 列有三种排序模式.每一列的排序模式是通过该列的 SortMode 属性指定的,该属性可以设置为以下的 DataGridViewColumnSortMode 枚举值之一. DataGridViewColumnSortMode 值说明: Automatic文本框列的默认排序模式.除非将列标头用于选择,否则单击列标头将自动按此列对 DataGridView 排序,并显示一个指示排序顺序的标志符号(向上的三角箭头:升序排序:向下的三角箭头:降序排序). NotSortable非

  • php数组函数序列之rsort() - 对数组的元素值进行降序排序

    rsort()定义和用法 rsort() 函数对数组的元素按照键值进行逆向排序.与 arsort() 的功能基本相同. 注释:该函数为 array 中的单元赋予新的键名.这将删除原有的键名而不仅是重新排序. 如果成功则返回 TRUE,否则返回 FALSE. 可选的第二个参数包含另外的排序标志. 语法 rsort(array,sorttype)参数 描述 array 必需.输入的数组. sorttype 可选.规定如何排列数组的值.可能的值: SORT_REGULAR - 默认.以它们原来的类型进

  • php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系

    krsort()定义和用法 krsort() 函数将数组按照键逆向排序,为数组值保留原来的键. 可选的第二个参数包含附加的排序标志. 若成功,则返回 TRUE,否则返回 FALSE. 语法 krsort(array,sorttype)参数 描述 array 必需.规定要排序的数组. sorttype 可选.规定如何排列数组的值.可能的值: SORT_REGULAR - 默认.以它们原来的类型进行处理(不改变类型). SORT_NUMERIC - 把值作为数字来处理 SORT_STRING - 把

  • vuejs通过filterBy、orderBy实现搜索筛选、降序排序数据

    直接贴代码了: 先上输入前的样子: <style> #example{margin:100px auto;width:600px;} .show{margin:10px;} #searchText{display: block;margin:0 auto 10px;height:24px;line-height: 24px;width:200px;} .content ul li{text-align: center;} .content ul li span{display: inline-

  • Java8排序stream.sorted()的使用

    在这个页面上我们将提供java 8 Stream sorted()示例.我们可以按照自然排序以及Comparator提供的排序对流进行排序.在java 8中Comparator可以使用lambda表达式进行实例化.我们还可以反转自然排序以及提供的排序Comparator.自然排序使用提供的顺序Comparable,必须由其实例是流元素的类实现.在这个页面上我们将排序List,Map并Set使用java 8流sorted()方法. 1.sorted()方法的语法示例. 1.1sorted():它使

随机推荐