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 表达式需要的所有参数 右侧:指定了 ...
随机推荐
- POJ 3602 Typographical Ligatures
[题意简述]:题意就是输入一串字符串,问我们有多少种不同的字符,也就是说出现过一次的字符,下次就不记到种数中了,特别的有 ff, fi ,fl ,ffi ,ffl,'',``, 这几个每一个算是一种 ...
- 淘宝code
淘宝code 相信大家都听说过GitHub,也有很多人在用,但是GitHub毕竟在国外,速度不是很给力,而且安装过程也是很漫长.今天来给大家介绍一个国内的免费的开源项目平台,当然也是一个SVN版本控制 ...
- .Net编译之AnyCPU - 进阶者系列 - 学习者系列文章
Visual Studio是一款非常强大的IDE工具,它为我们提供了强大的编码.调试和测试等工具,为我们编好.NET软件提供了强大的支持. 今天早晨想到了Visual Studio编译模式中的CPU类 ...
- AjaxPro使用说明文档
ajaxpro下载地址 AjaxPro使用说明 1 目录 2 修改历史纪录 3 1.什么是Ajax 4 2.为什么使用Ajax 4 3.Ajax应用场景 ...
- Memcached在.Net中的基本操作
Memcached在.Net中的基本操作 一.Memcached ClientLib For .Net 首先,不得不说,许多语言都实现了连接Memcached的客户端,其中以Perl.PHP为主. 仅 ...
- jquery简单异步读取xml文件
$.ajax({ url: '../XmlFiles/Sm.xml', async: true, cache: false, ...
- Date的使用
方法 说明 Date() 返回当日的日期和时间 getDate() 获取当天(1-31) getDay() 获取当天的星期(0-6) getMonth() 获取月份(0-11) getFullYear ...
- ASP.NET MVC扩展点
16个ASP.NET MVC扩展点[附源码] 1.自定义一个HttpModule,并将其中的方法添加到HttpApplication相应的事件中!即:创建一个实现了IHttpmodule接口的类,并将 ...
- iOS基础 - UITableViewController
1. 继承UITableViewController默认会设置数据源和代理,并且会自动遵守数据源和代理协议,并且self.tableView 相当于 self.view 2.更换控制器时,注意把sto ...
- ASP.NET MVC 單元測試系列
ASP.NET MVC 單元測試系列 (7):Visual Studio Unit Test 透過 Visual Studio 裡的整合開發環境 (IDE) 結合單元測試開發是再便利不過的了,在 Vi ...