JDK1.8的几个新特性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK1.8的几个新特性相关的知识,希望对你有一定的参考价值。

场景一:假设我们有一个 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的几个新特性的主要内容,如果未能解决你的问题,请参考以下文章

javaFX的几个新特性,让swing彻底过时

c++几个新特性

函数式接口及Lamada表达式

jdk1.8新特性——主要内容

SpringBoot 3.0最低版本要求的JDK 17,这几个新特性不能不知道!

HTTP2的新特性