1.lambda表达式排序

我们首先看几个比较常见的排序例子,基本数据类型的排序

List list = Arrays.asList(1,3,2,5,4);

list.sort(Comparator.naturalOrder());

System.out.println(list);

list.sort(Comparator.reverseOrder());

System.out.println(list);

输出结果:

[1, 2, 3, 4, 5]

[5, 4, 3, 2, 1]

我们可以看到执行结果是符合预期的,但是多数场景我们可能需要针对对象的某个属性进行排序,那么应该怎样做呢?我们看下边的例子:

public class Student {

private String name;

private String sexual;

private Integer age;

public Student(String name, String sexual,Integer age) {

this.name = name;

this.sexual = sexual;

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getSexual() {

return sexual;

}

public void setSexual(String sexual) {

this.sexual = sexual;

}

public Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

@Override

public String toString() {

return "Student{" +

"name='" + name + '\'' +

", sexual='" + sexual + '\'' +

", age=" + age +

'}';

}

public class Starter {

public static void main(String[] args) {

List list = Arrays.asList(

new Student("jack", 12),

new Student("john", 13),

new Student("lily", 11),

new Student("lucy", 10)

);

list.sort(Comparator.comparing(Student::getAge));

System.out.println(list);

list.sort(Comparator.comparing(Student::getAge).reversed());

System.out.println(list);

}

}

输出结果:

[Student{name='lucy', age=10}, Student{name='lily', age=11}, Student{name='jack', age=12}, Student{name='john', age=13}]

[Student{name='john', age=13}, Student{name='jack', age=12}, Student{name='lily', age=11}, Student{name='lucy', age=10}]

如果我们需要按照性别分组再排序又该如何实现呢?我们接着看下边的例子

public class Starter {

public static void main(String[] args) {

List list = Arrays.asList(

new Student("jack", "male", 12),

new Student("john", "male", 13),

new Student("lily", "female", 11),

new Student("david", "male", 14),

new Student("luck", "female", 13),

new Student("jones", "female", 15),

new Student("han", "male", 13),

new Student("alice", "female", 11),

new Student("li", "male", 12)

);

Map> groupMap = list.stream().sorted(Comparator.comparing(Student::getAge))

.collect(Collectors.groupingBy(Student::getSexual, Collectors.toList()));

System.out.println(groupMap.toString());

}

}

输出结果:

{

female = [

Student {

name = 'lily', sexual = 'female', age = 11

},

Student {

name = 'alice', sexual = 'female', age = 11

}, Student {

name = 'luck', sexual = 'female', age = 13

}, Student {

name = 'jones', sexual = 'female', age = 15

}],

male = [

Student {

name = 'jack', sexual = 'male', age = 12

}, Student {

name = 'li', sexual = 'male', age = 12

}, Student {

name = 'john', sexual = 'male', age = 13

}, Student {

name = 'han', sexual = 'male', age = 13

}, Student {

name = 'david', sexual = 'male', age = 14

}]

}

我们看到上边的输出结果存在一个问题,如果年龄相同则没有按照姓名排序,怎样实现这个功能呢?我们接着看下边的例子

Map> groupMap = list.stream().sorted(Comparator.comparing(Student::getAge)

.thenComparing(Student::getName)).collect(Collectors.groupingBy(Student::getSexual, Collectors.toList()));

输出结果:

{

female = [

Student {

name = 'alice', sexual = 'female', age = 11

}, Student {

name = 'lily', sexual = 'female', age = 11

}, Student {

name = 'luck', sexual = 'female', age = 13

}, Student {

name = 'jones', sexual = 'female', age = 15

}],

male = [

Student {

name = 'jack', sexual = 'male', age = 12

}, Student {

name = 'li', sexual = 'male', age = 12

}, Student {

name = 'han', sexual = 'male', age = 13

}, Student {

name = 'john', sexual = 'male', age = 13

}, Student {

name = 'david', sexual = 'male', age = 14

}]

}

看输出结果是符合预期的,到此为止我们的lambda表达式排序已经基本介绍完了,当然还有一些特殊的场景没涉猎到,大家可以根据兴趣再深入探索。

java函数式 new_Java函数式编程-4.lambda表达式一些高级用法相关推荐

  1. Java 函数式编程和 lambda 表达式

    为什么要使用函数式编程 函数式编程更多时候是一种编程的思维方式,是种方法论.函数式与命令式编程的区别主要在于:函数式编程是告诉代码你要做什么,而命令式编程则是告诉代码要怎么做.说白了,函数式编程是基于 ...

  2. Java 8th 函数式编程:lambda 表达式

    Lambda 表达式是 java 8th 给我们带来的几个重量级新特性之一,借用 lambda 表达式可以让我们的程序设计更加简洁.最近新的项目摒弃了 6th 版本,全面基于 8th 进行开发,本文将 ...

  3. 用通俗易懂的大白话搞明白Java里的函数式编程和Lambda表达式

    今天,用通俗易懂的大白话来彻底搞明白Java里的函数式编程和Lambda表达式 为什么引入函数式编程,lambda表达式? 大家都知道,JDK1.8引入了函数式编程,lambda表达式. 那有没有想过 ...

  4. 函数式编程与Lambda表达式

    函数式编程与Lambda表达式 1 函数式编程的优势 1.1 函数式编程思想 在数学中,函数就是有输入量.输出量的一套计算方案,也就是"拿什么东西做什 么事情".编程中的函数,也有 ...

  5. 函数式编程(Lambda表达式、Optional、Stream流)

    函数式编程(Lambda表达式.Optional.Stream流) 文章目录 函数式编程(Lambda表达式.Optional.Stream流) 一.概述 1. 为什么要学习函数式编程? 2. 函数式 ...

  6. Java学习记录五(多线程、网络编程、Lambda表达式和接口组成更新)

    Java学习记录五(多线程.网络编程.Lambda表达式和接口组成更新) Java 25.多线程 25.1实现多线程 25.1.1进程 25.1.2线程 25.1.3多线程的实现 25.1.4设置和获 ...

  7. 【故事编程:Lambda表达式】之久久未回的消息(三)

    开心一笑 [什么是代沟? 就是当你换上新衣服,在老妈面前走了一圈说: 妈,有范吗? 老妈看了你一眼说: 有,在锅里,自己盛--] 视频教程 大家好,我录制的视频<Java之优雅编程之道>已 ...

  8. IDEA报错解决:Error:(33, 35) java: -source 7 中不支持 lambda 表达式 (请使用 -source 8 或更高版本以启用 lambda 表达式)

    晚上在用IDEA的时候遇到了报错: Error:(33, 35) java: -source 7 中不支持 lambda 表达式(请使用 -source 8 或更高版本以启用 lambda 表达式) ...

  9. Java 8:一文掌握 Lambda 表达式 | CSDN 博文精选

    作者 | Android 大强哥 责编 | 郭芮 出品 | CSDN 博客 本文将介绍 Java 8 新增的 Lambda 表达式,包括 Lambda 表达式的常见用法以及方法引用的用法,并对 Lam ...

最新文章

  1. 一些意想不到的小bug。
  2. Openlayers 2.X加载高德地图
  3. 使用VS2019编写C语言程序,环境安装配置+代码调试
  4. mysql varchar 1024_mysql中的数据类型
  5. 从Python的turtle绘图开始学习图形化程序设计
  6. php生成网页,php – 网页生成(CMS喜欢)
  7. python报错:TypeError: 'str' object is not callable
  8. Everything Has Changed(HDU6354+圆交+求周长)
  9. 前端学习(1401):多人管理21新增用户
  10. HTML5笔记1——HTML5的发展史及标签的改变
  11. 基于matlab的频率响应分析,基于MATLAB/GUI的二阶低通电路频率响应分析与仿真
  12. 移动端1px像素实现技巧 - 讲解篇
  13. 如何知道AppDomain租约是否已过期呢
  14. LeetCode:Anagrams
  15. 53所高校研究生补贴政策一览表!
  16. Unable to cast object of type ‘Newtonsoft.Json.Linq.JArray‘ to type ‘Newtonsoft.Json.Linq.JObject‘.
  17. 文章编辑数据结构课程设计
  18. 乐高mindstormsev3_lego mindstorms ev3下载-乐高EV3机器人编程软件1.3.1 家庭版-东坡下载...
  19. 路由器 android 打印机,用路由器将普通打印机变成网络打印机
  20. 如何定位在测试中遇到的Bug?

热门文章

  1. Windows10---开启FTP服务与配置
  2. layui select change事件_一道2020年全国生物学联赛试题背后的“眼齿鸟事件”
  3. apache2 安装时报错 ServerRoot must be a valid directory
  4. 微信登陆报错:redirect_uri域名与后台配置不一致,错误码:10003 微信支付报错 微信登录报错 微信开发
  5. Graphviz安装配置教程(图文详解)
  6. dsp c语言程序设计,DSP C语言程序设计.pdf
  7. pythontcp服务器如何关闭阻塞_python 网络编程(socketserver,阻塞,其他方法)
  8. 4 读写文件_WEB安全之SQL注入(4)——读写文件
  9. android 计算圆周率方法,android Math的使用
  10. python能爬取什么_5行代码就能写个爬虫,python真是太方便了!