Java -Stream流和常见函数式接口
生活随笔
收集整理的這篇文章主要介紹了
Java -Stream流和常见函数式接口
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
概念
流(Stream)與集合類似,但集合中保存的是數據,而Stream中保存對集合或數組數據的操作。
特點
- tream 自己不會存儲元素。
- Stream 不會改變源對象。相反,他們會返回一個持有結果的新Stream。
- Stream 操作是延遲執行的,會等到需要結果的時候才執行。
使用
創建:
- 新建一個流。
中間操作:
- 在一個或多個步驟中,將初始Stream轉化到另一個Stream的中間操作。
終止操作:
- 使用一個終止操作來產生一個結果。該操作會強制之前的延遲操作立即執行,在此之后,該Stream就不能使用了。
創建方式:
- 通過Collection對象的stream()或parallelStream()方法。
- 通過Arrays類的stream()方法。
- 通過Stream接口的of()、iterate()、generate()方法。
- 通過IntStream、LongStream、DoubleStream接口中的of、range、rangeClosed方法。
創建
中間操作:
//中間操作//filter 過濾 傳入參數是一個斷言型接口 獲取集合中長度大于2的元素list.stream().filter(s -> s.length() > 2).forEach(System.out::println);//limit 和mysql的limit相似 獲取集合的前1條數據list.stream().limit(1).forEach(System.out::println);//distinct 去重list.stream().distinct().forEach(System.out::println);//sorted 排序 傳入一個比較器 和list的sort方法相似 將集合元素按長度從小到大排序list.stream().sorted((o1,o2)->o1.length()-o2.length());//map 傳入一個函數型接口 將集合中的元素全部轉換成Int型list.stream().map(Integer::parseInt).forEach(System.out::println);//parallel 使用多線程操作集合中的元素list.stream().parallel().forEach((s)->{System.out.println(Thread.currentThread().getName()+" "+s);});終止操作:
//終止操作//min 獲取集合中最小元素 最小的判斷是按照比較器來的 就是輸出經過比較器排序后的第一個元素Optional<String> min = list.stream().min((o1, o2) -> {return o1.length() - o2.length();});System.out.println(min.get());//max 獲取集合中最大元素 與min機制相同 是輸出最后一個Optional<String> max = list.stream().max((o1, o2) -> {return o1.length() - o2.length();});System.out.println(max.get());//count 計數 獲取長度為3的元素的個數long count = list.stream().filter(s -> s.length() == 3).count();System.out.println(count);//reduce 將元素轉換為int并求和list.stream().map(Integer::parseInt).reduce(0,(o1,o2)->o1+o2);//collect 將stream流對象轉換為List Set Map集合 將流轉換為listList<String> collect = list.stream().collect(Collectors.toList());collect.forEach(System.out::println);常見函數式接口
void accept(T t)對類型為T的對象應用操作
參數無 返回值為T
T get();返回類型為T的對象
3.Function<T,R>函數型接口
參數T 返回值R
R apply(T t) 對類型為T的對象應用操作,并返回類型為R類型的對象
4.Predicate 斷言型接口
參數T 返回值boolean
boolean test(T t);確定類型為T的對象是否滿足條件 滿足返回true
總結
以上是生活随笔為你收集整理的Java -Stream流和常见函数式接口的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RFID资产管理,实现资产管理智能化--
- 下一篇: docker 打包python 应用