????4???????????壨 Type Definitions???????????
???????????????????????????????????? ——?????????????????????ж??
????(h1?? h2) -> h1.getName().compareTo(h2.getName())
??????????????????
????@Test
????public void givenLambdaShortForm_whenSortingEntitiesByName_thenCorrectlySorted() {
????List<Human> humans = Lists.newArrayList(new Human("Sarah"?? 10)?? new Human("Jack"?? 12));
????humans.sort((h1?? h2) -> h1.getName().compareTo(h2.getName()));
????Assert.assertThat(humans.get(0)?? equalTo(new Human("Jack"?? 12)));
????}
????5????t??????????????????
???????????????????о???????????Lambda?????????????
??????????????????compareByNameThenAge???? ——????????????Comparator<Human>???????compareTo?????????????????
????public static int compareByNameThenAge(Human lhs?? Human rhs) {
????if (lhs.name.equals(rhs.name)) {
????return lhs.age - rhs.age;
????} else {
????return lhs.name.compareTo(rhs.name);
????}
????}
?????????????????????????????humans.sort??????
????humans.sort(Human::compareByNameThenAge);
???????????????t?????????Comparator????Ч?????????
????@Test
????public void givenMethodDefinition_whenSortingEntitiesByNameThenAge_thenCorrectlySorted() {
????List<Human> humans = Lists.newArrayList(new Human("Sarah"?? 10)?? new Human("Jack"?? 12));
????humans.sort(Human::compareByNameThenAge);
????Assert.assertThat(humans.get(0)?? equalTo(new Human("Jack"?? 12)));
????}
????6?????Comparator????????
?????????????????????????????ú?Comparator.comparing?????????????????——????????????????????????????Comparable??
??????????????getName() getter?????????Lambda?????????name???б????????
????@Test
????public void givenInstanceMethod_whenSortingEntitiesByNameThenAge_thenCorrectlySorted() {
????List<Human> humans = Lists.newArrayList(new Human("Sarah"?? 10)?? new Human("Jack"?? 12));
????Collections.sort(humans?? Comparator.comparing(Human::getName));
????Assert.assertThat(humans.get(0)?? equalTo(new Human("Jack"?? 12)));
????}
????7?????????
????JDK 8?????????????????????????Comparator??reverse Comparator??——???????????????????????????????
????@Test
????public void whenSortingEntitiesByNameReversed_thenCorrectlySorted() {
????List<Human> humans = Lists.newArrayList(
????new Human("Sarah"?? 10)?? new Human("Jack"?? 12));
????Comparator<Human> comparator = (h1?? h2) -> h1.getName().compareTo(h2.getName());
????humans.sort(comparator.reversed());
????Assert.assertThat(humans.get(0)?? equalTo(new Human("Sarah"?? 10)));
????}
????8????????????
????????????Lambda????????????????????——????????????д?????????????????????name?????age??????????????
@Test
public void whenSortingEntitiesByNameThenAge_thenCorrectlySorted() {
List<Human> humans = Lists.newArrayList(
new Human("Sarah"?? 12)?? new Human("Sarah"?? 10)?? new Human("Zack"?? 12));
humans.sort((lhs?? rhs) -> {
if (lhs.getName().equals(rhs.getName())) {
return lhs.getAge() - rhs.getAge();
} else {
return lhs.getName().compareTo(rhs.getName());
}
});
Assert.assertThat(humans.get(0)?? equalTo(new Human("Sarah"?? 10)));
}
????9???????????????
??????????????——?????name?????????????age????????????Comparator?μ?????????????
??????JDK 8???????????????????Comparator???????chain together????????????????????
????@Test
????public void givenComposition_whenSortingEntitiesByNameThenAge_thenCorrectlySorted() {
????List<Human> humans = Lists.newArrayList(
????new Human("Sarah"?? 12)?? new Human("Sarah"?? 10)?? new Human("Zack"?? 12));
????humans.sort(Comparator.comparing(Human::getName).thenComparing(Human::getAge));
????Assert.assertThat(humans.get(0)?? equalTo(new Human("Sarah"?? 10)));
????}
????10?????
??????????????????????????????????????Java 8 Lambda???????б????????——?????ù?????????????????????????塣
??????????Щ??????????????ζ??????????github?????????——???????????Eclipse???????????????ú??????????????С?