JDK1.8新特性
- lambda表達式
-
- 建立匿名内部類
- lambda和stream結合:過濾
- lambda和stream結合:過濾+統計
- lambda雙冒号的使用
- lambda map和stream.forEach 差別
- lambda map作用
- Reduce的作用
- ifPresent的作用
- Optional
- Collectors.groupingBy
lambda表達式
建立匿名内部類
// 1.8前建立匿名内部類
Converter<String ,Integer> converter = new Converter<String, Integer>() {
@Override
public Integer converter(String s) {
return Integer.parseInt(s);
}
};
// 1.8後建立匿名内部類方法1
Converter<String ,Integer> converter = (f) -> {
return Integer.valueOf(f);
};
// 1.8後建立匿名内部類方法2
Converter<String ,Integer> converter = (f) -> Integer.parseInt(f);
lambda和stream結合:過濾
public static void main(String[] args) {
// lambda與Stream結合使用
// 建立Stream對象
Stream<String> stream = Stream.of("aaa","bbb","ccc");
// 清單轉Stream對象
ArrayList<String> array = new ArrayList<String>();
array.add("a");
array.add("b");
array.add("c");
// 使用lambda表達式過濾出以"a"開頭的流
stream.filter((s) -> s.startsWith("a")).forEach(s -> System.out.println(s)); // 列印aaa
array.stream().filter(s -> s.startsWith("a")).forEach(s -> System.out.println(s)); // 列印a
}
lambda和stream結合:過濾+統計
public static void main(String[] args) {
// lambda與Stream結合使用
// 建立Stream對象
Stream<String> stream = Stream.of("aaa","bbb","ccc");
// 使用lambda表達式過濾出以"a"開頭的流,并統計出過濾後的元素個數
long count = stream.filter(s -> s.startsWith("a")).count();
System.out.println(count); // 列印1
}
lambda雙冒号的使用
public static void main(String[] args) {
// lambda與Stream結合使用
// 建立Stream對象
Stream<String> stream = Stream.of("aaa","bbb","ccc");
// 雙冒号的使用:将方法作為一個參數傳入到stream内部,使stream裡面的每一個參數都在該方法中執行一次
stream.forEach(TestClass::printStr); // 列印aaa bbb ccc
}
public static void printStr(String str) {
System.out.print(str + " ");
}
lambda map和stream.forEach 差別
map 方法的用途是将舊資料轉換後變為新資料,是一種 1:1 的映射,每個輸入元素按照規則轉換成另一個元素。該方法是 Intermediate 操作
Stream<String> stream = Stream.of("a", "b", "c", "d");
stream.map(String::toUpperCase).forEach(System.out::println);
lambda map作用
一般用于對集合資料做過濾,如擷取對象SapPurchaseTaskDetail中的id集合,可以使用
Reduce的作用
Reduce中文含義為:減少、縮小;而Stream中的Reduce方法幹的正是這樣的活:根據一定的規則将Stream中的元素進行計算後傳回一個唯一的值。
它有三個變種,輸入參數分别是一個參數、二個參數以及三個參數;
一個參數:
Stream<Integer> stream = Arrays.stream(new Integer[]{1, 2, 3, 4, 5, 6, 7, 8});
// 求最大值
stream.reduce((a, b) -> a >= b ? a : b).get();
兩個參數:
Stream<Integer> stream = Arrays.stream(new Integer[]{1, 2, 3, 4, 5, 6, 7, 8});
//求集合元素的和==>以初始值1作為開始,進行計算=1+1+2+3+4+5+6+7+8
Integer result = stream.reduce(1, Integer::sum);
ifPresent的作用
判斷是否為空,如果不為空,使用get
AList.stream()
.filter(a -> "小明".equals(a.getUserName()))
.findFirst()
.ifPresent(a -> {
a.setUserName("明明");
})
Optional
主要是用于判斷是否為空,主用于鍊式程式設計
精華文章 : https://www.cnblogs.com/zhangboyu/p/7580262.html
Collectors.groupingBy
用于分組,返加一個map集合