學習路上的自我記錄-------路好長,就問你慌不慌,大聲港,不慌。----jstarseven。java
實體類:ide
1 package com.server.model; 2 3 /** 4 * Created by jstarseven on 2016/3/21. 5 */ 6 public class Human { 7 8 private String name; 9 private int age; 10 11 @Override 12 public String toString() { 13 return "Human{" + 14 "name='" + name + '\'' + 15 ", age=" + age + 16 '}'; 17 } 18 19 public Human() { 20 super(); 21 } 22 23 public Human(final String name, final int age) { 24 super(); 25 this.name = name; 26 this.age = age; 27 } 28 29 public String getName() { 30 return name; 31 } 32 33 public void setName(String name) { 34 this.name = name; 35 } 36 37 public int getAge() { 38 return age; 39 } 40 41 public void setAge(int age) { 42 this.age = age; 43 } 44 45 public static int compareByNameThenAge(Human lhs, Human rhs) { 46 if (lhs.getName().equals(rhs.getName())) { 47 return lhs.getAge() - rhs.getAge(); 48 } else { 49 return lhs.getName().compareTo(rhs.getName()); 50 } 51 } 52 53 54 }
測試類:學習
1 package com.server.lambda; 2 3 import com.server.model.Human; 4 import org.junit.Test; 5 6 import java.util.ArrayList; 7 import java.util.Collections; 8 import java.util.Comparator; 9 import java.util.List; 10 11 /** 12 * Created by jstarseven on 2016/3/21. 13 */ 14 public class TestLambda { 15 16 // 不使用Lambda表達式的基本排序 17 @Test 18 public void givenPreLambda_whenSortingEntitiesByName_thenCorrectlySorted() { 19 20 List<Human> humans = new ArrayList(); 21 humans.add(new Human("A", 10)); 22 humans.add(new Human("C", 14)); 23 humans.add(new Human("C", 12)); 24 humans.add(new Human("B", 12)); 25 Collections.sort(humans, new Comparator<Human>() { 26 public int compare(Human o1, Human o2) { 27 return o1.getName().compareTo(o2.getName()); 28 } 29 }); 30 for (Human bean : humans) { 31 System.out.println(bean.toString()); 32 } 33 } 34 35 36 // 使用Lambda表達式的基本排序 37 @Test 38 public void whenSortingEntitiesByName_thenCorrectlySorted() { 39 List<Human> humans = new ArrayList(); 40 humans.add(new Human("A", 10)); 41 humans.add(new Human("C", 14)); 42 humans.add(new Human("C", 12)); 43 humans.add(new Human("B", 12)); 44 humans.sort((Human h1, Human h2) -> h1.getName().compareTo(h2.getName())); 45 for (Human bean : humans) { 46 System.out.println(bean.toString()); 47 } 48 } 49 50 51 // 沒有類型定義( Type Definitions)的基本排序 52 @Test 53 public void givenLambdaShortForm_whenSortingEntitiesByName_thenCorrectlySorted() { 54 List<Human> humans = new ArrayList(); 55 humans.add(new Human("A", 10)); 56 humans.add(new Human("C", 14)); 57 humans.add(new Human("C", 12)); 58 humans.add(new Human("B", 12)); 59 humans.sort((h1, h2) -> h1.getName().compareTo(h2.getName())); 60 for (Human bean : humans) { 61 System.out.println(bean.toString()); 62 } 63 } 64 65 // 使用靜態方法的引用來排序 66 @Test 67 public void givenMethodDefinition_whenSortingEntitiesByNameThenAge_thenCorrectlySorted() { 68 List<Human> humans = new ArrayList(); 69 humans.add(new Human("A", 10)); 70 humans.add(new Human("C", 14)); 71 humans.add(new Human("C", 12)); 72 humans.add(new Human("B", 12)); 73 humans.sort(Human::compareByNameThenAge); 74 for (Human bean : humans) { 75 System.out.println(bean.toString()); 76 } 77 } 78 79 // 提取Comparator進行排序 80 @Test 81 public void givenInstanceMethod_whenSortingEntitiesByNameThenAge_thenCorrectlySorted() { 82 List<Human> humans = new ArrayList(); 83 humans.add(new Human("A", 10)); 84 humans.add(new Human("C", 14)); 85 humans.add(new Human("C", 12)); 86 humans.add(new Human("B", 12)); 87 Collections.sort(humans, Comparator.comparing(Human::getName)); 88 for (Human bean : humans) { 89 System.out.println(bean.toString()); 90 } 91 } 92 93 // 反轉排序 94 @Test 95 public void whenSortingEntitiesByNameReversed_thenCorrectlySorted() { 96 List<Human> humans = new ArrayList(); 97 humans.add(new Human("A", 10)); 98 humans.add(new Human("C", 14)); 99 humans.add(new Human("C", 12)); 100 humans.add(new Human("B", 12)); 101 Comparator<Human> comparator = (h1, h2) -> h1.getName().compareTo(h2.getName()); 102 103 humans.sort(comparator.reversed()); 104 for (Human bean : humans) { 105 System.out.println(bean.toString()); 106 } 107 } 108 109 // 多條件排序 110 @Test 111 public void whenSortingEntitiesByNameThenAge_thenCorrectlySorted() { 112 List<Human> humans = new ArrayList(); 113 humans.add(new Human("A", 10)); 114 humans.add(new Human("C", 14)); 115 humans.add(new Human("C", 12)); 116 humans.add(new Human("B", 12)); 117 humans.sort((lhs, rhs) -> { 118 if (lhs.getName().equals(rhs.getName())) { 119 return lhs.getAge() - rhs.getAge(); 120 } else { 121 return lhs.getName().compareTo(rhs.getName()); 122 } 123 }); 124 for (Human bean : humans) { 125 System.out.println(bean.toString()); 126 } 127 } 128 129 // 多條件組合排序 130 @Test 131 public void givenComposition_whenSortingEntitiesByNameThenAge_thenCorrectlySorted() { 132 List<Human> humans = new ArrayList(); 133 humans.add(new Human("A", 10)); 134 humans.add(new Human("C", 14)); 135 humans.add(new Human("C", 12)); 136 humans.add(new Human("B", 12)); 137 humans.sort(Comparator.comparing(Human::getName).thenComparing(Human::getAge)); 138 for (Human bean : humans) { 139 System.out.println(bean.toString()); 140 } 141 } 142 }
-END-測試