zoukankan      html  css  js  c++  java
  • (1)java8初体验

    很多博客都拿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可以非常直观的表达出这一点,并且代码非常的干净,一行代码,完美解决。

  • 相关阅读:
    Sass--扩展继承
    Sass--混合宏的不足
    学习笔记47—PhotoShop技巧
    学习笔记46—如何使Word和EndNote关联
    学习笔记45—Linux压缩集
    学习笔记44—Linux下安装freesurfer
    学习笔记43—Linux安装集
    学习笔记42—Win7下安装Linux双系统
    学习笔记41—ttest误区
    学习笔记40—endnote点点滴滴
  • 原文地址:https://www.cnblogs.com/zhandouBlog/p/9383227.html
Copyright © 2011-2022 走看看