学习路上的自我记录-------路好长,就问你慌不慌,大声港,不慌。----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排序的更多相关文章

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

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

  2. Java8 Collections.sort()及Arrays.sort()中Lambda表达式及增强版Comparator的使用

    摘要:本文主要介绍Java8 中Arrays.sort()及Collections.sort()中Lambda表达式及增强版Comparator的使用. 不废话直接上代码 import com.goo ...

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

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

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

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

  5. java8的lambda表达式

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

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

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

  7. java8之lambda表达式入门

    1.基本介绍 lambda表达式,即带有参数的表达式,为了更清晰地理解lambda表达式,先上代码: 1.1 两种方式的对比 1.1.1 方式1-匿名内部类 class Student{ privat ...

  8. JAVA8之lambda表达式具体解释,及stream中的lambda使用

    前言: 本人也是学习lambda不久,可能有些地方描写叙述有误,还请大家谅解及指正! lambda表达式具体解释 一.问题 1.什么是lambda表达式? 2.lambda表达式用来干什么的? 3.l ...

  9. java8中Lambda表达式和Stream API

    一.Lambda表达式 1.语法格式 Lambda是匿名函数,可以传递代码.使用“->”操作符,改操作符将lambda分成两部分: 左侧:指定了 Lambda 表达式需要的所有参数 右侧:指定了 ...

随机推荐

  1. 基于Asterisk的VoIP开发指南——(2)Asterisk AGI程序编写指南

    原文:基于Asterisk的VoIP开发指南--(2)Asterisk AGI程序编写指南 5. Asterisk AGI程序编写指南 5.1概述 很多时候,我们需要在拨号方案中做某些业务逻辑的判断或 ...

  2. 如何防范CC攻击

    服务器如何防范CC攻击CC攻击是DDOS(分布式拒绝服务)的一种,相比其它的DDOS攻击CC似乎更有技术含量一些.这种攻击你见不到虚假IP,见不到特别大的异常流量,但造成服务器无法进行正常连接,听说一 ...

  3. C# socket通信随记回顾

    ----tcp(传输 控制 协议)是可靠消息:三次握手(发给对方,对方发给自己,证明对方接到消息,在发给对方,说明自己能接到对方消息,这样就都知道了):tcp:每发送一次消息,对方都会回复,证明接受到 ...

  4. CSS绘制无图片的气泡对话框

    <div class="qipao_contianer">            <div class="qipao_content yj3" ...

  5. 排序算法的C#实现

    8种主要排序算法的C#实现   新的一年到了,很多园友都辞职要去追求更好的工作环境,我也是其中一个,呵呵! 最近闲暇的时候我开始重温一些常用的算法.老早就买了<算法导论>,一直都没啃下去. ...

  6. SQL计算年代差

    1.用datediff函数 select datediff(yyyy,StuBirthday,getdate())>17 2.用year函数 select (year(getdate()-yea ...

  7. C#版考题

    某软件大赛C#版考题整理——[单选题]   一.单选题(10小题共20.0分) 1. 以下JavaScript代码的正确输出结果是:(). 1 2 3 4 5 6 7 8 9 <script t ...

  8. C#打包应用程序

    摘要:本文介绍在C#中手把手教你用C#打包应用程序(安装程序卸载程序) 1:新建安装部署项目 打开VS,点击新建项目,选择:其他项目类型->安装与部署->安装向导(安装项目也一样),然后点 ...

  9. 测试驱动 ASP.NET MVC 和构建可测试 ASP.NET MVC 应用程序

    [测试驱动 ASP.NET MVC] http://t.cn/8kdi4Wl [构建可测试 ASP.NET MVC 应用程序]http://t.cn/8kdi4Wj

  10. 解析Infopath生成的XSN结构

    解析Infopath生成的XSN结构 解压XSN文件,得到下图文件 Infopath包括xsl.xsd.xsf.xml文件格式 Manifest.xsf是infopath的主要集合文件,包含对其他各个 ...