Java8:使用Lambda表达式增强版Comparator排序
学习路上的自我记录-------路好长,就问你慌不慌,大声港,不慌。----jstarseven。
实体类:
package com.server.model; /**
* Created by jstarseven on 2016/3/21.
*/
public class Human { private String name;
private int age; @Override
public String toString() {
return "Human{" +
"name='" + name + '\'' +
", age=" + age +
'}';
} public Human() {
super();
} public Human(final String name, final int age) {
super();
this.name = name;
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public static int compareByNameThenAge(Human lhs, Human rhs) {
if (lhs.getName().equals(rhs.getName())) {
return lhs.getAge() - rhs.getAge();
} else {
return lhs.getName().compareTo(rhs.getName());
}
} }
测试类:
package com.server.lambda; import com.server.model.Human;
import org.junit.Test; import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List; /**
* Created by jstarseven on 2016/3/21.
*/
public class TestLambda { // 不使用Lambda表达式的基本排序
@Test
public void givenPreLambda_whenSortingEntitiesByName_thenCorrectlySorted() { List<Human> humans = new ArrayList();
humans.add(new Human("A", 10));
humans.add(new Human("C", 14));
humans.add(new Human("C", 12));
humans.add(new Human("B", 12));
Collections.sort(humans, new Comparator<Human>() {
public int compare(Human o1, Human o2) {
return o1.getName().compareTo(o2.getName());
}
});
for (Human bean : humans) {
System.out.println(bean.toString());
}
} // 使用Lambda表达式的基本排序
@Test
public void whenSortingEntitiesByName_thenCorrectlySorted() {
List<Human> humans = new ArrayList();
humans.add(new Human("A", 10));
humans.add(new Human("C", 14));
humans.add(new Human("C", 12));
humans.add(new Human("B", 12));
humans.sort((Human h1, Human h2) -> h1.getName().compareTo(h2.getName()));
for (Human bean : humans) {
System.out.println(bean.toString());
}
} // 没有类型定义( Type Definitions)的基本排序
@Test
public void givenLambdaShortForm_whenSortingEntitiesByName_thenCorrectlySorted() {
List<Human> humans = new ArrayList();
humans.add(new Human("A", 10));
humans.add(new Human("C", 14));
humans.add(new Human("C", 12));
humans.add(new Human("B", 12));
humans.sort((h1, h2) -> h1.getName().compareTo(h2.getName()));
for (Human bean : humans) {
System.out.println(bean.toString());
}
} // 使用静态方法的引用来排序
@Test
public void givenMethodDefinition_whenSortingEntitiesByNameThenAge_thenCorrectlySorted() {
List<Human> humans = new ArrayList();
humans.add(new Human("A", 10));
humans.add(new Human("C", 14));
humans.add(new Human("C", 12));
humans.add(new Human("B", 12));
humans.sort(Human::compareByNameThenAge);
for (Human bean : humans) {
System.out.println(bean.toString());
}
} // 提取Comparator进行排序
@Test
public void givenInstanceMethod_whenSortingEntitiesByNameThenAge_thenCorrectlySorted() {
List<Human> humans = new ArrayList();
humans.add(new Human("A", 10));
humans.add(new Human("C", 14));
humans.add(new Human("C", 12));
humans.add(new Human("B", 12));
Collections.sort(humans, Comparator.comparing(Human::getName));
for (Human bean : humans) {
System.out.println(bean.toString());
}
} // 反转排序
@Test
public void whenSortingEntitiesByNameReversed_thenCorrectlySorted() {
List<Human> humans = new ArrayList();
humans.add(new Human("A", 10));
humans.add(new Human("C", 14));
humans.add(new Human("C", 12));
humans.add(new Human("B", 12));
Comparator<Human> comparator = (h1, h2) -> h1.getName().compareTo(h2.getName()); humans.sort(comparator.reversed());
for (Human bean : humans) {
System.out.println(bean.toString());
}
} // 多条件排序
@Test
public void whenSortingEntitiesByNameThenAge_thenCorrectlySorted() {
List<Human> humans = new ArrayList();
humans.add(new Human("A", 10));
humans.add(new Human("C", 14));
humans.add(new Human("C", 12));
humans.add(new Human("B", 12));
humans.sort((lhs, rhs) -> {
if (lhs.getName().equals(rhs.getName())) {
return lhs.getAge() - rhs.getAge();
} else {
return lhs.getName().compareTo(rhs.getName());
}
});
for (Human bean : humans) {
System.out.println(bean.toString());
}
} // 多条件组合排序
@Test
public void givenComposition_whenSortingEntitiesByNameThenAge_thenCorrectlySorted() {
List<Human> humans = new ArrayList();
humans.add(new Human("A", 10));
humans.add(new Human("C", 14));
humans.add(new Human("C", 12));
humans.add(new Human("B", 12));
humans.sort(Comparator.comparing(Human::getName).thenComparing(Human::getAge));
for (Human bean : humans) {
System.out.println(bean.toString());
}
}
}
-END-

Java8:使用Lambda表达式增强版Comparator排序的更多相关文章
- Java8:Lambda表达式增强版Comparator和排序
1.概述 在这篇教程里,我们将要去了解下即将到来的JDK 8(译注,现在JDK 8已经发布了)中的Lambda表达式——特别是怎样使用它来编写Comparator和对集合(Collection)进行排 ...
- Java8 Collections.sort()及Arrays.sort()中Lambda表达式及增强版Comparator的使用
摘要:本文主要介绍Java8 中Arrays.sort()及Collections.sort()中Lambda表达式及增强版Comparator的使用. 不废话直接上代码 import com.goo ...
- java8的lambda表达式,将List<DTO> 转为 List<DO>
将List<PhoneDTO>转为List<PhoneDO>,通过java8的lambda表达式来操作,比传统的for循环精简很多: /** * List<PhoneDT ...
- Java8中Lambda表达式的10个例子
Java8中Lambda表达式的10个例子 例1 用Lambda表达式实现Runnable接口 //Before Java 8: new Thread(new Runnable() { @Overri ...
- java8的lambda表达式
关于java8的lambda表达式 lambda表达式一般用于接口,因为lambda表达式是函数式编程. 1.有且仅有一个抽象方法被称为函数式接口,函数式接口可以显示的被@FunctionalInte ...
- java8之lambda表达式(1)-基本语法
lambda表达式,即带有参数的表达式,为更清晰地理解lambda表达式,先看如下例子: (1) class Student{ private String name; private Double ...
- java8之lambda表达式入门
1.基本介绍 lambda表达式,即带有参数的表达式,为了更清晰地理解lambda表达式,先上代码: 1.1 两种方式的对比 1.1.1 方式1-匿名内部类 class Student{ privat ...
- JAVA8之lambda表达式具体解释,及stream中的lambda使用
前言: 本人也是学习lambda不久,可能有些地方描写叙述有误,还请大家谅解及指正! lambda表达式具体解释 一.问题 1.什么是lambda表达式? 2.lambda表达式用来干什么的? 3.l ...
- java8中Lambda表达式和Stream API
一.Lambda表达式 1.语法格式 Lambda是匿名函数,可以传递代码.使用“->”操作符,改操作符将lambda分成两部分: 左侧:指定了 Lambda 表达式需要的所有参数 右侧:指定了 ...
随机推荐
- 编程算法 - 二叉树的深度 代码(C)
二叉树的深度 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入一棵二叉树的根节点, 求该树的深度. 依次选择最深的左右子树, 然后递归加1. ...
- JavaScript的闭包特性
闭包是一个比较抽象的概念,尤其是对js新手来说.在这里,我就我个人的理解j简单谈一下: 闭包:官方解释是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部 ...
- WinForm中回车键实现文本框之间的跳转
利用窗体的KeyPreView .设置KeyPreView = true 设置窗体的KeyPreView 属性为True后,那么窗体内的子控件响应KeyPress事件(或其他事件)之前,会先响应窗体的 ...
- android 实现分享功能两种方法
当我想做一个智能的记事本的时候,我就在尝试自己写一组分享功能.后来才知道,原来每个社交软件中都有自己的分享接口. 这就大大减少了我们的代码量了. 第一种方法:特点--简单 package com.ex ...
- 开源框架之TAB控件
我的开源框架之TAB控件 需求 (1)支持iframe.html.json格式的tab内容远程请求 (2)支持动态添加tab (3)支持远程加载完成监听,支持tab激活事件监听 (4)支持relo ...
- Spring.Net+Nhibernate+Asp.Net Mvc 框架
搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 (一)搭建你的环境 使用这套框架不是很长时间.但也基本应用了几个项目中了.在此和大家分享一下我是怎样一步一步搭建此框架 ...
- PHP中判断输入验证码是否一致
首先用session将随机生成的验证码的值传到页面,然后获取当前文本框中输入的值 进行对比:代码如下: 生成的随机数,把它传到session里面 <? session_start(); 必 ...
- 简话ASP.NET Web API
简话ASP.NET Web API 在vs2012中,我们很容易在根据选择的ASP.NET MVC Web应用程序来新建一个Web API应用,聪明的你一定想见得到,Web API和MVC有着某种联系 ...
- wp7学习笔记
1.xap:最终是压缩包:最终部署有系统控制,防止流亡软件:放到固有位置productid;有的文件放在.dll中或直接放入目录下:控制有生成操作:content,内容,content效率更高不用从. ...
- maven 启蒙
Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具.为了替代ANT的Apache开源项目.现在的项目越来越大.ANT已经不适用了. 1.部署m ...