开发者社区> kunfire> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Java steam 中排序的用法

简介: 排序的用法
+关注继续查看

案例一:

  • Comparator多属性排序: 先按名字不分大小写排,再按GID倒序排,最后按年龄正序排
@AllArgsConstructor
@Data
public class Person {
    private String name;
    private String gid;
    private Integer age;
}
import com.google.common.collect.Lists;
import com.ultra.cmp.report.dto.Person;

import java.util.Comparator;
import java.util.List;


/**
 * @author ygf
 * @date 2022/9/2 9:26
 */
public class TestPer {
    public static void main(String[] args) {
        List<Person> personList = getTestList();
        personList.sort(Comparator.comparing(Person::getName, String.CASE_INSENSITIVE_ORDER)
                .thenComparing(Person::getGid, (a, b) -> b.compareTo(a))
                .thenComparingInt(Person::getAge));
        personList.stream().forEach(System.out::println);
    }


    public static List<Person> getTestList() {
        return Lists.newArrayList(new Person("dai", "301", 10), new Person("dai", "303", 10),
                new Person("dai", "303", 8), new Person("dai", "303", 6), new Person("dai", "303", 11),
                new Person("dai", "302", 9), new Person("zhang", "302", 9), new Person("zhang", "301", 9),
                new Person("Li", "301", 8));
    }

}

输出结果:

Person(name=dai, gid=303, age=6)
Person(name=dai, gid=303, age=8)
Person(name=dai, gid=303, age=10)
Person(name=dai, gid=303, age=11)
Person(name=dai, gid=302, age=9)
Person(name=dai, gid=301, age=10)
Person(name=Li, gid=301, age=8)
Person(name=zhang, gid=302, age=9)
Person(name=zhang, gid=301, age=9)

对Stream中的元素进行排序:reversed():倒序

String[] array = { "c", "c", "a", "b", "b", "e", "e", "d", "d"};
List<String> newList = Arrays.stream(array).sorted().collect(Collectors.toList());
List<Student> students = new ArrayList<>();
students.add(new Student("Mike", 10, "male", 88));
students.add(new Student("Jack", 13,"male", 90));
students.add(new Student("Lucy", 15,"female", 100));
students.add(new Student("Jessie", 12,"female", 78));
students.add(new Student("Allon", 16,"female", 92));
students.add(new Student("Alis", 22,"female", 50));
//正序
List<String> nameList = students.stream()
    .sorted(Comparator.comparing(Student::getScore))
    .map(Student::getName)
    .collect(Collectors.toList());
System.out.println("按成绩排序输出学生姓名:" + nameList);
//倒序
List<String> nameList2 = students.stream()
    .sorted(Comparator.comparing(Student::getScore).reversed())
    .map(Student::getName)
    .collect(Collectors.toList());
System.out.println("按成绩排序输出学生姓名:" + nameList2);
//按成绩排序输出学生姓名:[Alis, Jessie, Mike, Jack, Allon, Lucy]
//按成绩排序输出学生姓名:[Lucy, Allon, Jack, Mike, Jessie, Alis]
正序:
list=list.stream().sorted().collect(Collectors.toList());
或者
list.stream().sorted(Comparator.comparing(Student::getAge)) ;
倒序:
list.stream().sorted(Comparator.comparing(Student::getAge)) ;
list.stream().sorted(Comparator.comparing(Student::getAge).reversed());
//含空值的正序(升序)排序(按创建时间排序) nullsFirst:空值放第一位
list=list.stream().sorted(Comparator.comparing(l -> l.getCreateTime(), Comparator.nullsFirst(Date::compareTo))).collect(Collectors.toList());
//nullsLast:空值放最后
list=list.stream().sorted(Comparator.comparing(l -> l.getCreateTime(), Comparator.nullsLast(Date::compareTo).reversed())).collect(Collectors.toList());

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Java线程安全以及线程安全的实现方式和内存模型(JMM)(2)
Java线程安全以及线程安全的实现方式和内存模型(JMM)(2)
44 0
不用任何框架,Java 就能实现定时任务的 3 种方法!
1、 sleep 这也是我们最常用的 sleep 休眠大法,不只是当作休眠用,我们还可以利用它很轻松的能实现一个简单的定时任务。
101 0
Java 实现滑动时间窗口限流算法,你见过吗?
网上搜滑动时间窗口限流算法,大多都太复杂了,本人实现了个简单的,先上代码:
87 0
遗传算法的基本概念和实现,附Java实现案例!
基因遗传算法是一种灵感源于达尔文自然进化理论的启发式搜索算法。该算法反映了自然选择的过程,即最适者被选定繁殖,并产生下一代。本文简要地介绍了遗传算法的基本概念和实现,希望能为读者展示启发式搜索的魅力。_
171 0
java之wait()、notify()实现非阻塞的生产者和消费者
java之wait()、notify()实现非阻塞的生产者和消费者
91 0
java之用反射实现方法(已知实体对象和实体参数)
java之用反射实现方法(已知实体对象和实体参数)
53 0
栈与队列之用java实现队列
栈与队列之用java实现队列
59 0
Java 自动化 - 调用sikuli实现图像识别桌面自动化:打开浏览器查询天气实例演示,java调用图形化脚本语言sikuli实现自动化
Java 自动化 - 调用sikuli实现图像识别桌面自动化:打开浏览器查询天气实例演示,java调用图形化脚本语言sikuli实现自动化
211 0
Java 技术篇-使用poi开源jar包实现读取excel实例演示,poi-3.17.jar获取
Java 技术篇-使用poi开源jar包实现读取excel实例演示,poi-3.17.jar获取
120 0
Java 技术篇-利用ClipboardOwner实现实时监听剪切板功能实例演示
Java 技术篇-利用ClipboardOwner实现实时监听剪切板功能实例演示
167 0
+关注
kunfire
sf
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Java基础入门(四)-泛型、反射、注解
立即下载
阿里巴巴Java开发手册PDF1.2.0版(非最新版)
立即下载
阿里巴巴Java开发手册PDF1.1.0版(非最新版)
立即下载