1. 程式人生 > >(1)java8初體驗

(1)java8初體驗

turn person tab nbsp wysiwyg mac 為我 target ide

很多博客都拿Comparator,我也貼一下吧。

java8以前的匿名內部類用來排序。

//匿名內部類
@Test
public void java8Test() {
    Person p1 = new Person(22);
    Person p2 = new Person(23);
    Person p3 = new Person(21);
    Person p4 = new Person(20);
    List<Person> list = Lists.newArrayList(p1, p2, p3, p4);
    Collections.sort(list, new Comparator<Person>() {
        @Override
        public int compare(Person o1, Person o2) {
            //兩個數判斷大小不要直接相減,如果減一個負數得到的值可能會超出範圍,從而返回負數
            return Ints.compare(o1.getAge(), o2.getAge());//guava提供的方法
        }
    });
    System.out.println(list);//業務代碼千萬不要用
}
//java8
@Test
public void java8Test() {
    Person p1 = new Person(22);
    Person p2 = new Person(23);
    Person p3 = new Person(21);
    Person p4 = new Person(20);
    List<Person> list = Lists.newArrayList(p1, p2, p3, p4);
    Collections.sort(list, Comparator.comparing(Person::getAge));
    System.out.println(list);//業務代碼千萬不要用
}

顯而易見,java8只用了一行代碼實現排序,我這裏並沒有用傳統博客裏寫的類似(o1,o2)->o1-o2這種代碼,因為我認為目前我寫的這個版本是能非常直觀的看出差異的。

代碼讀起來的感覺就像是,對List排序,通過Person的age正序排列,不再是對List排序,創建一個匿名內部類,排序邏輯是正序。

為什麽說是正序,如果是逆序的話是代碼是這樣寫的。

Collections.sort(list, Comparator.comparing(Person::getAge).reversed());

只需要加一個reversed(),相信不少同學,在平常寫排序代碼時,都要理一下這個邏輯,而java8可以非常直觀的表達出這一點,並且代碼非常的幹凈,一行代碼,完美解決。

(1)java8初體驗