码迷,mamicode.com
首页 > 其他好文 > 详细

JDK1.8的几个新特性

时间:2018-07-17 12:37:53      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:jdk1.8   返回   最小值   assert   war   现在   etag   特性   ons   

场景一:假设我们有一个 List 包含一系列的 Person,Person 有姓名 name 和年龄 age 连个字段。现要求这个列表中年龄大于 20 的人数。

通常按照以前我们可能会这么写:

long count = 0;

for (Person p : persons) {

    if (p.getAge() > 20) {

        count ++;

    }

}

但如果使用 stream 的话,则会简单很多:

long count = persons.stream()

                    .filter(person -> person.getAge() > 20)

                    .count();

这只是 stream 的很简单的一个用法。现在链式调用方法算是一个主流,这样写也更利于阅读和理解编写者的意图,一步方法做一件事。


场景二:最大值、最小值

max和min

Stream 上常用的操作之一是求最大值和最小值。Stream API 中的 max 和 min 操作足以解决这一问题。


List<Integer> list = Lists.newArrayList(3, 5, 2, 9, 1);

int maxInt = list.stream()

                 .max(Integer::compareTo)

                 .get();

int minInt = list.stream()

                 .min(Integer::compareTo)

                 .get();

assertEquals(maxInt, 9);

assertEquals(minInt, 1);

这里有 2 个要点需要注意:


max 和 min 方法返回的是一个 Optional 对象(对了,和 Google Guava 里的 Optional 对象是一样的)。Optional 对象封装的就是实际的值,可能为空,所以保险起见,可以先用 isPresent() 方法判断一下。Optional 的引入就是为了解决方法返回 null 的问题。

Integer::compareTo 也是属于 Java 8 引入的新特性,叫做 方法引用(Method References)。在这边,其实就是 (int1, int2) -> int1.compareTo(int2) 的简写,可以自己查阅了解,这里不再多做赘述。


JDK1.8的几个新特性

标签:jdk1.8   返回   最小值   assert   war   现在   etag   特性   ons   

原文地址:http://blog.51cto.com/xiaok007/2145283

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