Java8 Lambda.stream.sorted() 方法使用浅析分享

文章目录

  • [Java8 Lambda.stream.sorted() 方法使用浅析分享](#Java8 Lambda.stream.sorted() 方法使用浅析分享)

Java8 Lambda.stream.sorted() 方法使用浅析分享

本文主要分享运用 Java8 中的 Lambda.stream.sorted方法排序的使用!

sorted() 重载方法一

sorted():默认自然排序;

升序

java 复制代码
 @Test
    public void testSorted1() {
        List<Integer> list = Lists.newArrayList(2,5,3,4,1,2,6,7,9,1);
        List<Integer> collect = list.stream().sorted().collect(Collectors.toList());
        System.out.println(JSONObject.toJSONString(collect));
    }

运行结果:

降序

倒序需要结合 Comparator.reverseOrder() 方法使用:

java 复制代码
 @Test
    public void testSorted1() {
        List<Integer> list = Lists.newArrayList(2,5,3,4,1,2,6,7,9,1);
        List<Integer> collect = list.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
        System.out.println(JSONObject.toJSONString(collect));
    }

运行结果:

sorted() 重载方法二

sorted(Comparator<? super T> comparator):通过创建 Comparator 实例,按照指定规则升/降序排序元素。

升序

按生日升序:

java 复制代码
    @Test
    public void testSorted2() {
        List<Student> list = this.getStudent();
        List<Student> collect = list.stream().sorted(Comparator.comparing(Student::getBirthday))
                .collect(Collectors.toList());
        System.out.println(JSONObject.toJSONString(collect));
    }

降序

按生日降序:

java 复制代码
	@Test
    public void testSorted2() {
        List<Student> list = this.getStudent();
        List<Student> collect = list.stream().sorted(Comparator.comparing(Student::getBirthday, Comparator.reverseOrder()))
                .collect(Collectors.toList());
        System.out.println(JSONObject.toJSONString(collect));
    }	

多字段排序

排序说明:

  1. 生日升序;

  2. 学号降序;

java 复制代码
 	@Test
    public void testSorted2() {
        List<Student> list = this.getStudent();
        List<Student> collect = list.stream().sorted(Comparator.comparing(Student::getBirthday)
                        .thenComparing(Student::getNum, Comparator.reverseOrder()))
                .collect(Collectors.toList());
        System.out.println(JSONObject.toJSONString(collect));
    }

运行结果:

mock代码

student对象:

java 复制代码
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Student {

    /**
     * 姓名
     */
    private String name;
    /**
     * 年龄
     */
    private Integer age;
    /**
     * 生日
     */
    @JSONField(format="yyyy-MM-dd HH:mm:ss")
    private Date birthday;
    /**
     * 学号
     */
    private Integer num;

}

mock数据:

java 复制代码
public List<Student> getStudent() {
        return Lists.newArrayList(
                new Student("小张", 17, DateUtil.parse("2006-10-03 15:18:56"), 11),
                new Student("小李", 15, DateUtil.parse("2008-03-19 02:18:56"), 5),
                new Student("小李", 15, DateUtil.parse("2008-03-19 02:18:56"), 2),
                new Student("小王", 16, DateUtil.parse("2007-02-21 22:18:56"), 29));
    }
eUtil.parse("2008-03-19 02:18:56"), 2),
                new Student("小王", 16, DateUtil.parse("2007-02-21 22:18:56"), 29));
    }

感 谢 各 位 大 佬 的 阅 读,随 手 点 赞,日 薪 过 万~! !!

相关推荐
FLGB13 小时前
maven漏洞检测报告
java·maven
农夫山泉2号13 小时前
【c++】——c++编译的so中函数有额外的字符
java·服务器·c++
wangan09413 小时前
不带圆圈的二叉树
java·前端·javascript
小马哥编程13 小时前
【软考架构】滑动窗口限流算法的原理是什么?
java·开发语言·架构
饕餮争锋13 小时前
Spring AOP原理简析
java·spring
okseekw14 小时前
Maven从入门到实战:核心概念+配置详解+避坑指南
java·后端
tryxr14 小时前
ReentrantLock 与 synchronized 的区别
java··reentrantlock
Java爱好狂.14 小时前
Java面试Redis核心知识点整理!
java·数据库·redis·分布式锁·java面试·后端开发·java八股文
sheji341614 小时前
【开题答辩全过程】以 基于Java的应急安全学习平台的设计与实现为例,包含答辩的问题和答案
java·开发语言·学习