1. 程式人生 > >JDK1.8的幾個新特性

JDK1.8的幾個新特性

bsp 我們 get per 年齡 就是 person int ++

場景一:假設我們有一個 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的幾個新特性