Lambda用到了JDK8自带的一个函数式接口Comparator<T>。

准备一个Apple类

public class Apple {
private int weight;
private String color; public Apple(){} public Apple(int weight) {
this.weight = weight;
} public Apple(int weight, String color) {
this.weight = weight;
this.color = color;
} setters();getters();toString();
}

步骤一:

public class AppleComparator implements Comparator<Apple> {
@Override
public int compare(Apple o1, Apple o2) {
return o1.getWeight() - o2.getWeight();
}
}

步骤二:准备一个List集合

ArrayList<Apple> inventory = Lists.newArrayList(
new Apple(10, "red"),
new Apple(5, "red"),
new Apple(1, "green"),
new Apple(15, "green"),
new Apple(2, "red"));

步骤三:顺序排序,三种方式

/**
* 顺序排序
*/
// 1、传递代码,函数式编程
inventory.sort(new AppleComparator());
System.out.println(inventory); // 2、匿名内部类
inventory.sort(new Comparator<Apple>() {
@Override
public int compare(Apple o1, Apple o2) {
return o1.getWeight() - o2.getWeight();
}
}); // 3、使用Lambda表达式
inventory.sort((a, b) -> a.getWeight() - b.getWeight()); // 4、使用Comparator的comparing
Comparator<Apple> comparing = comparing((Apple a) -> a.getWeight());
inventory.sort(comparing((Apple a) -> a.getWeight()));
//或者等价于
inventory.sort(comparing(Apple::getWeight));

步骤四:逆序排序

/**
* 逆序排序
*/
// 1、 根据重量逆序排序
inventory.sort(comparing(Apple::getWeight).reversed());

步骤五:如果两个苹果一样重,就得再找一个条件来进行排序

// 2、如果两个苹果的重量一样重,怎么办?那就再找一个条件进行排序呗
inventory.sort(comparing(Apple::getWeight).reversed().thenComparing(Apple::getColor));

  

https://gitee.com/play-happy/base-project

参考:

【1】《Java8实战》

Java8-用Lambda表达式给List集合排序的更多相关文章

  1. Java8:Lambda表达式增强版Comparator和排序

    1.概述 在这篇教程里,我们将要去了解下即将到来的JDK 8(译注,现在JDK 8已经发布了)中的Lambda表达式——特别是怎样使用它来编写Comparator和对集合(Collection)进行排 ...

  2. Java8中Lambda表达式的10个例子

    Java8中Lambda表达式的10个例子 例1 用Lambda表达式实现Runnable接口 //Before Java 8: new Thread(new Runnable() { @Overri ...

  3. java8的lambda表达式,将List<DTO> 转为 List<DO>

    将List<PhoneDTO>转为List<PhoneDO>,通过java8的lambda表达式来操作,比传统的for循环精简很多: /** * List<PhoneDT ...

  4. java使用lambda表达式对List集合进行操作(JDK1.8)

    1. 使用lambda表达式对List集合进行操作(JDK1.) List<TreeDto> collect = list.stream().filter(item -> item. ...

  5. java8新特性:对map集合排序

    一.简单介绍Map 在讲解Map排序之前,我们先来稍微了解下map,map是键值对的集合接口,它的实现类主要包括:HashMap, TreeMap, Hashtable以及LinkedHashMap等 ...

  6. java8的lambda表达式

    关于java8的lambda表达式 lambda表达式一般用于接口,因为lambda表达式是函数式编程. 1.有且仅有一个抽象方法被称为函数式接口,函数式接口可以显示的被@FunctionalInte ...

  7. Java8新特性 利用流和Lambda表达式对List集合进行处理

    Lambda表达式处理List 最近在做项目的过程中经常会接触到 lambda 表达式,随后发现它基本上可以替代所有 for 循环,包括增强for循环.也就是我认为,绝大部分的for循环都可以用 la ...

  8. Java8:使用Lambda表达式增强版Comparator排序

    学习路上的自我记录-------路好长,就问你慌不慌,大声港,不慌.----jstarseven. 实体类: package com.server.model; /** * Created by js ...

  9. Lambda表达式和Java集合框架

    本文github地址 前言 我们先从最熟悉的Java集合框架(Java Collections Framework, JCF)开始说起. 为引入Lambda表达式,Java8新增了java.util. ...

  10. java8之lambda表达式(1)-基本语法

    lambda表达式,即带有参数的表达式,为更清晰地理解lambda表达式,先看如下例子: (1) class Student{ private String name; private Double ...

随机推荐

  1. UVa 10163 Storage Keepers (二分 + DP)

    题意:有n个仓库,m个管理员,每个管理员有一个能力值P,每个仓库只能由一个管理员看管,但是每个管理员可以看管k个仓库(但是这个仓库分配到的安全值只有p/k,k=0,1,...),雇用的管理员的工资即为 ...

  2. Javascript 需要注意的细节

    1.使用 === 代替 ==JavaScript 使用2种不同的等值运算符:===|!== 和 ==|!=,在比较操作中使用前者是最佳实践.“如果两边的操作数具有相同的类型和值,===返回true,! ...

  3. 20145232 韩文浩 《Java程序设计》第6周学习总结

    教材学习内容总结 Java是以串流(Stream)的方式来处理输入与输出. 串流是一种抽象观念,从键盘输入资料,将处理结果输入档案,以及读取档案的内容等动作皆视为串流的处理. 输入串流代表对象为jav ...

  4. android-基础编程之开篇

    先唠叨两句,机缘巧合现在来做android开发了,之前做后台c的,对这块不是很了解,要慢慢学习,对于framework层的学习感觉需要app开发经验更好点,在完成工作之余积累一些基础知识.既来之则安之 ...

  5. webservice之helloword(web)rs

    spring整合webservice 1.pom.xml文件 <dependencies> <!-- cxf 进行rs开发 必须导入 --> <dependency> ...

  6. Spring的两种代理JDK和CGLIB的区别浅谈

    一.原理区别: java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理. 而cglib动态代理是利用asm开源包,对代理对象类的class文件 ...

  7. UIKit Dynamic主题学习笔记

    1.重力效果:UIGravityBehavior @IBOutlet weak var frogImage: UIImageView! //创建一个关联到view的动画(必须为全局变量) lazy v ...

  8. XML Publisher 并发程序由于"输出提交处理程序提交失败

    http://www.cnblogs.com/benio/archive/2012/03/30/2424900.html xmlp 报表运行完成后,状态为warning,其原因大概有以下3类:1.&q ...

  9. 安卓读写INI文件 安卓读写INI文件

    安卓读写INI文件   安卓读写INI文件 uses System.IoUtils procedure TForm1.Button1Click(Sender: TObject);varIniFile: ...

  10. 工作随笔——elasticsearch 6.6.1安装(docker-compose方式)

    docker-compose.yml: version: '2.2' services: es1: image: docker.elastic.co/elasticsearch/elasticsear ...