学习路上的自我记录-------路好长,就问你慌不慌,大声港,不慌。----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. unity资源

    unity资源集中贴 1.unity经验之谈 http://jingyan.baidu.com/article/19192ad820f17be53e570715.html 2.百度网盘,分享了一点模型 ...

  2. GitHub上整理

    GitHub上整理 技术站点 Hacker News:非常棒的针对编程的链接聚合网站 Programming reddit:同上 MSDN:微软相关的官方技术集中地,主要是文档类 infoq:企业级应 ...

  3. OCP-1Z0-051-题目解析-第12题

    12. You need to produce a report where each customer's credit limit has been incremented by $1000. I ...

  4. leetcode[71] Sqrt(x)

    题目,就是实现一个开方,返回是整数.int sqrt(int x) 用二分法,因为一个数的开方肯定小于 x/2 + 1, 因为小于5的某些数的开方并不一定比x/2小,所以要+1,那么们定义一个left ...

  5. 在ubuntu下把php的网页调试功能打开

    我这儿的环境是 Ubuntu 14.04  + Lighttpd + PHP5.5 默认情况下php的网页调试功能是不打开的,当PHP解析到一个错误的语法时会直接输出为空白. 我在网上找一许多文章,说 ...

  6. AjaxPro使用说明文档

    ajaxpro下载地址 AjaxPro使用说明     1 目录     2 修改历史纪录     3 1.什么是Ajax     4 2.为什么使用Ajax     4 3.Ajax应用场景     ...

  7. Dev的GridView中如何自动生成行号

    这里提供一个方法,使用简单,只需将GridView传入,即可自动生成行号 public static void SetRowNumberIndicator(GridView gridView) { g ...

  8. linux sendmail 邮件服务器架设(fedora 8)

    linux sendmail 邮件服务器架设(fedora 8) 2009-01-22 17:27 3316人阅读 评论(2) 收藏 举报 邮件服务器linuxprotocolscaching测试lo ...

  9. 解决nexus下载maven索引的问题

    解决nexus下载maven索引的问题 (2011-10-12 17:48:46) 转载▼ 标签: it 分类: java 转自 http://www.colorfuldays.org/program ...

  10. jsonp总结

    由于“同源策略”的限制,ajax不能做跨域请求,jsonp是当下解决跨域请求最流行的方案,来个例子(index.html): <!doctype html> <html lang=& ...