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());
}
}
}