码迷,mamicode.com
首页 > 编程语言 > 详细

(1)java8初体验

时间:2018-07-28 21:46:18      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:直接   一行代码   cti   版本   -name   type   排列   实现   ram   

很多博客都拿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初体验

标签:直接   一行代码   cti   版本   -name   type   排列   实现   ram   

原文地址:https://www.cnblogs.com/zhandouBlog/p/9383227.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!