屌炸天,JDK8的排序大法!!

首先祝大家端午节快乐!

今天总结了下JDK中排序的方法,包括JDK8中强大的lambda表达式及函数式接口运用,不废话,请看下面示例。

public class Test {

public static void main(String[] args) {

List<User> list = initList();

// jdk8之前的排序

Collections.sort(list, new Comparator<User>() {

@Override

public int compare(User o1, User o2) {

return o1.getAge().compareTo(o2.getAge());

}

});

// jdk8 lambda排序,带参数类型

list = initList();

list.sort((User u1, User u2) -> u1.getAge().compareTo(u2.getAge()));

list.forEach(System.out::println);

System.out.println();

// jdk8 lambda排序,不带参数类型

list = initList();

list.sort((u1, u2) -> u1.getAge().compareTo(u2.getAge()));

list.forEach(System.out::println);

System.out.println();

// jdk8 排序,User类静态方法引用

list = initList();

list.sort(User::compareAge);

list.forEach(System.out::println);

System.out.println();

// jdk8 升序排序,Comparator提供的静态方法

list = initList();

Collections.sort(list, Comparator.comparing(User::getAge));

list.forEach(System.out::println);

System.out.println();

// jdk8 降序排序,Comparator提供的静态方法

list = initList();

Collections.sort(list, Comparator.comparing(User::getAge).reversed());

list.forEach(System.out::println);

System.out.println();

// jdk8 组合排序,Comparator提供的静态方法,先按年纪排序,年纪相同的按名称排序

list = initList();

Collections.sort(list, Comparator.comparing(User::getAge).thenComparing(User::getName));

list.forEach(System.out::println);

}

private static List<User> initList() {

List<User> list = new ArrayList<>();

list.add(new User("lisa", 23));

list.add(new User("tom", 11));

list.add(new User("john", 16));

list.add(new User("jennis", 26));

list.add(new User("tin", 26));

list.add(new User("army", 26));

list.add(new User("mack", 19));

list.add(new User("jobs", 65));

return list;

}

}

看完有没有觉得很惊艳,简直屌炸天,Lumbda表达式+函数式接口还有更多强大的应用下回再做个专题介绍。

原文发布于微信公众号 - Java技术栈(javastack)

原文发表时间:2017-05-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏菩提树下的杨过

温故而知新:new与override的差异以及virtual方法与abstract方法的区别

先直接看代码吧: using System; namespace ConsoleApplication1 { class Program { ...

21180
来自专栏逸鹏说道

Python3 与 C# 基础语法对比(Function专栏-新排版)

在线编程:https://mybinder.org/v2/gh/lotapp/BaseCode/master

19330
来自专栏技术专栏

java 10进制转16进制

1.1K20
来自专栏峰会SaaS大佬云集

C#学习---基础入门(五)

    语法  string Insert(int startIndex ,string value)

14040
来自专栏Create Sun

基础拾遗------接口详解

  接口定义了所有类继承接口时应遵循的契约。接口定义了 "要什么" ,派生类定义了 "怎么给" 。  引用CLR VIA C#(类和接口继承)   在Mi...

36080
来自专栏一枝花算不算浪漫

[读书笔记]C#学习笔记三: C#类型详解..

364140
来自专栏大内老A

yield在WCF中的错误使用——99%的开发人员都有可能犯的错误[下篇]

昨天写了《yield在WCF中的错误使用——99%的开发人员都有可能犯的错误[上篇]》,引起了一些讨论。关于yield关键字这个语法糖背后的原理(C#编译器将它...

20080
来自专栏java一日一条

掌握 Java 8 Lambda 表达式

Lambda 表达式 是 Java8 中最重要的功能之一。使用 Lambda 表达式 可以替代只有一个函数的接口实现,告别匿名内部类,代码看起来更简洁易懂。La...

12020
来自专栏Java帮帮-微信公众号-技术文章全总结

12.Java异常处理案例

Java 实例 - 异常处理方法 以下实例演示了使用 System 类的 System.err.println() 来展示异常的处理方法: Exception...

39450
来自专栏坚毅的PHP

golang使用 mongo

 连接集群 mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:por...

32050

扫码关注云+社区

领取腾讯云代金券