利⽤streamsorted进⾏降序排序
根据value值的⼤⼩进⾏降序排序,并进⾏截取。
public static void main(String[] args) {
List<Map<String, Object>> list = wArrayList();
Map<String, Object> map = wHashMap();
map.put("id", 1);
map.put("value", 20);
list.add(map);
map = wHashMap();
map.put("id", 2);
map.put("value", 80);
list.add(map);
map = wHashMap();
map.put("id", 3);
map.put("value", 21);
list.add(map);
map = wHashMap();
map.put("id", 4);
map.put("value", 28);
list.add(map);
System.out.println("原始数据:"+list);
//根据value进⾏排序得到升序排列
list.sort(Comparatorparing(h -> ConvertUtil.("value"))));
//颠倒排序,变为降序排列
//截取前3个
System.out.println("结果"+list.subList(0, 3));
}
使⽤1.8 stream处理
List<Map<String, Object>>result = list.stream().sorted((h1, h2) ->
//降序
ConvertUtil.("value"))pareTo(ConvertUtil .("value"))))
//前3个
.
limit(3)
//终⽌流
.List());
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接⼝的排序,java stream
使⽤sorted()排序
1、简单List<Integer> 排序=====》
package st;
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().List()); //⾃然排序
}
}
结果
2、简单List<String>排序
package st;
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().List());
System.out.String());
}
}
结果
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 st;
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((Comparatorparing(Person::getAge))).List());//只根据年龄排序,升序
System.out.println(collect2);
List<Person> collect2 = people.stream().sorted((Comparatorparing(Person::getAge)).reversed()).List());//只根据年龄排序,降序
System.out.println(collect2);
List<Person> collect3 = people.stream().sorted((Comparatorparing(Person::getAge)).thenComparing(Comparatorparing(Person::getName))).List());//先根据年龄进⾏排序,遇见相同的,然后根据姓名进⾏排序,都升序
System.out.println(collect3);
List<Person> collect4 = people.stream().sorted((Comparatorparing(Person::getAge)).thenComparing(Comparatorparing(Person::getName)).reversed()).List());/先根据年龄进⾏排序,遇见相同的,然后根据姓名进⾏排序,降序【都降  System.out.println(collect4);
List<Person> collect5 = people.stream().sorted(Comparatorparing(Person::getAge).reversed().thenComparing(Comparatorparing(Person::getName)).reversed()).List());//年龄升序,姓名降序
System.out.println(collect5);
List<Person> collect6 = people.stream().sorted(Comparatorparing(Person::getAge).reversed().thenComparing(Comparatorparing(Person::getName))).List());//根据年龄降序,姓名升序
System.out.println(collect6);
}
}
结果
只根据年龄进⾏排序的,默认是升序
根据年龄降序
先根据年龄,后根据姓名排序的,默认都是升序
根据年龄和性别,先根据年龄,年龄相同根据性别,只在最后⼀个comparing上写reversed,两个排序都是降序【根据年龄降序,姓名降序】
根据年龄升序,年龄相同,根据姓名降序
总结
先这么着吧
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。如有错误或未考虑完全的地⽅,望不吝赐教。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。