一、什麼是Stream和Lambda表達式
在Java8之前,我們需要遍歷一個List的元素,通常要用for循環,然後對List中每個元素進行相應的操作。而在Java8中引入了Stream和Lambda表達式的概念,使得我們可以更加便捷地完成這些操作。
Stream是Java8新增的一個API,它允許我們對一個元素序列進行各種操作,比如篩選、排序、映射等等。而Lambda表達式則是一種匿名函數,它可以代替Java中的匿名內部類,並提供了更加簡潔高效的操作。
放在List上,我們可以通過Stream和Lambda表達式來完成一些常見的操作,比如對List進行過濾、映射和排序。
二、Stream的常見用法
1. 過濾
List<String> list = Arrays.asList("apple", "banana", "orange", "pear");
List<String> filteredList = list.stream().filter(s -> s.startsWith("a")).collect(Collectors.toList());
System.out.println(filteredList);
代碼中首先創建了一個字符串List,然後使用Stream的filter方法來過濾以a開頭的字符串,並通過collect方法將結果轉換成List類型。
2. 映射
List<String> list = Arrays.asList("apple", "banana", "orange", "pear");
List<Integer> lengthList = list.stream().map(String::length).collect(Collectors.toList());
System.out.println(lengthList);
代碼中首先創建了一個字符串List,然後使用Stream的map方法來將每個字符串映射成它的長度,並通過collect方法將結果轉換成List類型。
3. 排序
List<String> list = Arrays.asList("apple", "banana", "orange", "pear");
List<String> sortedList = list.stream().sorted().collect(Collectors.toList());
System.out.println(sortedList);
代碼中首先創建了一個字符串List,然後使用Stream的sorted方法來對List中的元素進行排序,最後通過collect方法將結果轉換成List類型。
三、Lambda表達式的常見用法
1. forEach
List<String> list = Arrays.asList("apple", "banana", "orange", "pear");
list.forEach(s -> System.out.println(s));
代碼中首先創建了一個字符串List,然後使用forEach方法和Lambda表達式來遍歷List中的元素,並在控制台上打印出來。
2. reduce
List<Integer> list = Arrays.asList(1, 2, 3, 4);
int sum = list.stream().reduce(0, (a, b) -> a + b);
System.out.println(sum);
代碼中首先創建了一個整數List,然後使用reduce方法和Lambda表達式來對List中的元素進行累計求和,並將結果輸出。
3. Predicate
List<String> list = Arrays.asList("apple", "banana", "orange", "pear");
Predicate<String> predicate = s -> s.startsWith("a");
List<String> filteredList = list.stream().filter(predicate).collect(Collectors.toList());
System.out.println(filteredList);
代碼中首先創建了一個字符串List,然後使用Predicate和Stream的filter方法來篩選以a開頭的字符串,並通過collect方法將結果轉換成List類型。
四、總結
Stream和Lambda表達式是Java8中的重要特性,它們能夠使我們更加輕鬆地完成一些常見的操作,比如List的過濾、映射和排序。通過掌握這些用法,我們可以讓我們的代碼變得更加簡潔、高效。
原創文章,作者:RJPO,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/132022.html