在Java 8之前,您编写了几行代码来对对象集合进行排序? Java 8您需要多少个?

您可以在Java 8中用一行完成。

让我们看看下面的Employee类。

public class Employee {private String name;private Integer age;public Employee(String name, Integer age) {super();this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}}

使用Collection的sort()方法,可以对员工列表进行排序。 sort()方法期望Comparator作为参数,以便比较两个Employee对象。 因此,我们的第一个解决方案如下所示。

public class EmployeeComparotor implements Comparator {@Overridepublic int compare(Employee e1, Employee e2) {return e1.getAge().compareTo(e2.getAge()); }
}employeeList.sort(new EmployeeComparotor());

无需实现Comparator并实例化它的新实例,我们可以使用匿名类来改进程序。

employeeList.sort(new Comparator() {@Overridepublic int compare(Employee e1, Employee e2) {return e1.getAge().compareTo(e2.getAge()); }
});

现在,让我们看看,如何通过使用Java 8功能来进一步改进此代码,以减少冗长的内容。 Java 8引入了lambda表达式,该表达式允许我们将代码传递给方法。 Lambda表达式可以传递给需要功能接口的方法。 功能接口是仅定义一种抽象方法的接口。 在Java 8中,比较器是一个功能接口。 Collection的sort()方法期望Comparator作为参数,该参数接受功能接口。 在这种情况下,比较器表示BiFunction的描述符。 BiFunction是Java 8中的功能接口。因此,您可以按以下方式将lambda表达式传递给sort方法。 为了按年龄对员工列表进行排序,您需要如下一行。

employeeList.sort((Employee e1, Employee e2) -> e1.getAge().compareTo(e2.getAge()));

Java编译器可以通过使用lambda出现的上下文来推断lambda表达式的参数类型。 因此,您可以删除参数的类型并按如下所示重写代码。

employeeList.sort((e1, e2) -> e1.getAge().compareTo(e2.getAge()));

让我们尝试进一步减少代码。 Java 8 Comparator具有一个称为compare()的静态方法,该方法接受一个Function作为参数。 此函数应提取排序键并产生一个Comparator对象。 因此,对Java 8中的对象列表进行排序的最短代码是:

employeeList.sort(comparing((e) -> e1.getAge()));

代替使用lambda表达式,我们可以使用方法引用来使我们的代码稍微冗长一些。

employeeList.sort(comparing(Employee::getAge));

如果要按年龄降序对员工列表进行排序,则可以使用接口的reversed()默认方法。

employeeList.sort(comparing(Employee::getAge).reversed());

现在,让我们看一下,您要按年龄对员工进行排序,然后再按年龄对类似年龄的员工进行排序。 只是提醒一下,您是如何进行Java早期版本的。 在Java 8中,您只需使用thenComparing()方法即可。

employeeList.sort(comparing(Employee::getAge).thenComparing(Employee::getName));

翻译自: https://www.javacodegeeks.com/2018/06/sort-collection-objects-java8.html

在Java 8之前,您编写了几行代码来对对象集合进行排序?相关推荐

  1. java编写排序的代码_在Java 8之前,您编写了几行代码来对对象集合进行排序?...

    java编写排序的代码 在Java 8之前,您编写了几行代码来对对象集合进行排序? Java 8您需要多少个? 您可以在Java 8中用一行完成. 让我们看看下面的Employee类. public ...

  2. java sql 排序_JAVA像SQL一样对List对象集合进行排序

    在开始之前,我先卖个关子提一个问题:假设我们有一个Movie类,这个类有三个成员变量分别是starred(是否收藏), title(电影名称), rating(评分).你知道怎么对一个Movie对象组 ...

  3. 《码出高效:Java 开发手册》正式发布,83行代码计划启动

    可爱的Java开发者们,让你们久等了! 9月22日杭州云栖大会,众所期待的新书<码出高效:Java 开发手册>正式发布,并宣布将所有图书收益捐赠于技术公益项目. 本次新书发布,邀请了来自阿 ...

  4. Java学习的快速入门:10行代码学JQuery

    生活在快速发展时代的我们,如果不提速可能稍不留神就被时代淘汰了.快节奏的时代成就了快餐,亦成就了速成教育.尤其是身处互联网行业的我们,更新换代的速度更是迅速,快速掌握一门技术已经成为潮流趋势.怎样才能 ...

  5. java推送微信消息换行_5行代码实现微信小程序模版消息推送 (含推送后台和小程序源码)...

    我们在做小程序开发时,消息推送是不可避免的.今天就来教大家如何实现小程序消息推送的后台和前台开发.源码会在文章末尾贴出来. 其实我之前有写过一篇:<springboot实现微信消息推送,java ...

  6. java rowmapper 通用实现_将每行映射为MAP对象的RowMapper实现

    import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import j ...

  7. java 邮件 客户端_JAVA编写ESMTP客户端发送邮件代码

    由SOHU向网易发邮件 1.效果 2.代码 import java.io.*; import java.net.*; public class Smtptest { public static voi ...

  8. java开发区块链只需150行代码

    本文目的是通过java实战开发教程理解区块链是什么.将通过实战入门学习,用Java自学开发一个很基本的区块链,并在此基础上能扩展如web框架应用等.这个基本的java区块链也实现简单的工作量证明系统. ...

  9. java加按钮_Java实战:50行代码实现QQ登录和微博登录

    作者丨我是小茗同学 整理丨Java团长 https://www.cnblogs.com/liuxianan 1. 前言 个人网站最近增加了评论功能,为了方便用户不用注册就可以评论,对接了 QQ 和微博 ...

最新文章

  1. 多线程--GCD的基本用法
  2. 如何快速实现移动端短视频功能?
  3. Python异常体系结构图
  4. jQuery简单介绍
  5. php位运算重要吗,PHP位运算的用途
  6. android webview 长按复制,Android webview 点击或长按有蒙层 – 热爱改变生活
  7. Python脚本运行出现语法错误:IndentationError: unindent does not match any outer indentation level
  8. 人群计数(Crowd Counting)研究综述
  9. Spring 笔记(一)概念梳理
  10. 点歌台 PHP,MeMusic3.0 PHP在线点歌系统 - 下载 - 搜珍网
  11. 一文看懂Python列表表达式及高阶函数如lambda, zip, enumerate, map和filter方法
  12. Android App开发动画特效中插值器和估值器的讲解以及利用估值器实现弹幕动画实战(附源码和演示视频 可直接使用)
  13. excel表格打印每页都有表头_excel技巧:excel表格打印后每页自动带标题、页眉页脚...
  14. 工业控制计算机固态硬盘,工业控制电脑ssd固态硬盘怎么正确使用?
  15. 本周白银市场再刮超级旋风
  16. 深圳云计算培训:云计算是怎么分类的
  17. python get sheet_python复制excel的sheet表的方法
  18. Kivy转apk——使用打包虚拟机(亲测~)
  19. css零到一基础教程009:CSS HSL 颜色
  20. ACM-ICPC 2018 南京赛区网络预赛 E-AC Challenge

热门文章

  1. SDOI2018 物理实验
  2. JavaFX UI控件教程(二十三)之Menu
  3. IntelliJ IDEA 最常用配置详细图解,新手入门必看
  4. Oracle入门(五C)之68个系统变量的key和默认value
  5. Java NIO学习笔记之图解ByteBuffer
  6. java变量作用域Scope
  7. JavaScript常用单词整理总结
  8. java三大框架实现任务调度——IRemindService
  9. 数组的初始化与默认值
  10. Flume整合SparkStreaming出现UnsupportedClassVersionError: org/apache/spark/streaming/flume/sink/SparkFlum