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

  • 相关阅读:
    rpc框架thrift
    rpc框架 SimpleXMLRP
    pyqt与拉勾网爬虫的结合
    python打造线程池
    python concurrent.futures包使用,捕获异常
    linux环境下pytesseract的安装和央行征信中心的登录验证码识别
    使用装饰器捕捉错误
    hbase 学习(十六)系统架构图
    大数据入门:各种大数据技术介绍
    How MapReduce Works
  • 原文地址:https://www.cnblogs.com/zhandouBlog/p/9383227.html
Copyright © 2011-2022 走看看