一、Stream簡介
在Java 8中,引入了一個新的特性Stream,它是對集合(Collection)對象功能的增強。Stream 的 API 能讓你以一種聲明的方式處理數據,毫不誇張地說,Stream API 是Java 8最令人期待的改變之一,它位於java.util.stream包中。Stream操作分為三個階段:創建流、通過中間操作開展業務處理邏輯、終結流處理。
二、使用stream的基本語法
Java 8中,Collection接口被擴展,提供了兩個方法來生成Stream流:
/**
* 常規方式構造Stream
*/
List list = Arrays.asList("a", "b", "c");
Stream stream = list.stream();
/**
* 靜態方法構造Stream
*/
Stream stream = Stream.of("a", "b", "c");
通過上述方式,我們成功地生成了一個Stream對象。緊接着,我們可以對該Stream對象進行各種操作,比如獲取最大值,在線處理等。
三、獲取Stream中的最大值
使用Java 8的Stream對象獲取集合中的最大值,我們需要了解幾個API方法。其中,我們常用到的有max()方法和comparingXXX()方法。
public static <T> Optional<T> max(Comparator<? super T> comparator)
// Returns the maximum element of this stream according to the provided Comparator.
public static <T> Comparator<T> comparing(Function<? super T,? extends U> keyExtractor)
max()方法參數為一個實現了Comparator接口的對象,即元素的比較器。它返回Optional<T>對象,我們可以通過get()方法獲取對應的結果,也可以使用orElse()方法作為默認結果。
comparingXXX()方法是用於生成比較器的靜態工廠方法。例如,comparingInt()方法用於比較整數,comparingDouble()方法用於比較浮點數。要注意的是,我們在使用comparingXXX()方法時,需要傳入一個函數式接口,用於獲取元素進行比較的Key
下面是針對List集合中元素為Integer類型,求最大值的代碼:
List<Integer> list = Arrays.asList(1, 5, 3, 7, 9);
Optional<Integer> max = list.stream().max(Integer::compareTo);
System.out.println(max.orElse(-1));
在上述代碼中,我們傳入的函數式接口為Integer::compareTo。
四、使用Stream對象獲取最大元素的實例
假設在List集合中有很多Person對象,每個Person都有一個age屬性,我們希望通過Stream對象獲取年齡最大的那個Person實例,需要要怎麼做呢?
class Person {
private String name;
private int age;
// getter and setter
}
// 構造Person集合
List<Person> people = Arrays.asList(
new Person("Tom", 18),
new Person("Jerry", 22),
new Person("Lily", 25),
new Person("Lucy", 19)
);
// 通過Stream對象獲取年齡最大的Person實例
Optional<Person> personOptional = people.stream()
.max(Comparator.comparingInt(Person::getAge));
Person person = personOptional.orElse(null);
System.out.println(person.getName() + ":" + person.getAge());
在這段代碼中,我們首先定義了一個Person類,包含name和age屬性。隨後,我們構造一個Person列表,通過Stream對象並調用max()方法獲取年齡最大的Person實例,comparingInt()函數式接口用於指定按照何種方式進行比較。最終,我們獲取了年齡最大的Person實例並打印了其姓名和年齡。
五、終結語
Java 8的Stream API提供了非常多的方法,常用的有filter、map、forEach、reduce、sorted等方法,這些方法都是為了讓開發者更便捷地對集合對象進行處理。而在處理集合對象的過程中,獲取到最大值是一項常見的需求,使用Stream對象獲取最大值是一種很常見的操作,也是代碼優化的一個好方式。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/310059.html