Java学习day08--方法引用和Stream流
生活随笔
收集整理的這篇文章主要介紹了
Java学习day08--方法引用和Stream流
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Java學習day08--方法引用和Stream流
- 方法引用和Stream流
- 方法引用
- 獲取Collection、Map、數組流
- Stream流的常用操作方法
方法引用和Stream流
1).流思想:類似于“迭代器”,對“集合元素”進行多次的篩選、過濾、統計用的。 2).流的工作方式:每個操作后,這個流對象就成為垃圾,等待被回收;但這個操作的方法通常會返回一個新流--每個“流對象”都是一次性的。類似于:流水線。 3).Stream流中大量運用lambda表達式,對于某些lambda表達式而言,可以利用方法引用替換lambda表達式,從而再次簡化代碼。 4).方法引用是指,當我們要編寫一個Lambda表達式時,發現已經有一個現有的方法已經實現了我們在Lambda中要實現的功能,這時就可以引用這個已寫好的方法,來代替我們的Lambda表達式。方法引用
我們首先創建一個類,以下所有內容講解都基于這個類
public class Student {private String name;private int age;// 構造方法引用public Student(String name, int age) {this.name = name;this.age = age;}// 構造方法引用public Student(String name){this.name = name;this.age = 20;}// 構造方法引用public Student() {this("熱巴", 18);}// 利用這個實例化方法引用public String getName() {return name;}// 利用這個靜態方法引用public static boolean func1(String s){return s.length() > 2;} }public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}格式,對象名::函數名
格式,類名::函數名
注意:該方法應用只能通過類名調用,實例化對象不可調用
不管是無參構造還是有參構造,格式寫法相同,程序會自動判斷選擇哪個構造函數。寫法為類名::new,如Student::new
格式:類型名[]::new
獲取Collection、Map、數組流
通過Collection接口的默認方法stream(),具體調用格式為Collection對象.stream()即可獲取。如:
有三種獲取流的方式
這里又分為兩種,一種是獲取引用類型的流,另一種是獲取基本類型的流。
4.零散的數據獲取流
Stream<Integer> s = Stream.of(1, 23, 4, 5, 7, 8, 9, 0, 8);Stream流的常用操作方法
示例代碼:
ArrayList<String> list = new ArrayList<>(); list.add("張無忌"); list.add("周芷若"); list.add("趙敏"); list.add("張強"); list.add("張三豐");// 1. forEach逐一處理 list.stream().forEach(s -> System.out.println(s + "是好樣的")); // 在每一個元素后面加“好樣的” 程序結果為: 張無忌是好樣的 周芷若是好樣的 趙敏是好樣的 張強是好樣的 張三豐是好樣的示例代碼:
// 先 篩選姓“張”的,再在尾部加上“是好樣的” list.stream().filter(s -> s.startsWith("張")).forEach(s -> System.out.println(s + "是好樣的")); 結果為: 張無忌是好樣的 張強是好樣的 張三豐是好樣的示例代碼:
// 獲取姓張的一共有幾個 long num = list.stream().filter(s -> s.startsWith("張")).count(); System.out.println("張姓的一共有" + num + "個"); 結果為: 張姓的一共有3個示例代碼:
// 獲取張姓的前一個并打印 list.stream().filter(s -> s.startsWith("張")).limit(1).forEach(System.out::println); 結果為: 張無忌示例代碼:
獲取張姓的除了一個并打印 list.stream().filter(s -> s.startsWith("張")).skip(1).forEach(System.out::println);示例代碼:
ArrayList<String> list1 = new ArrayList<>(); list1.add("123"); list1.add("456"); list1.add("789"); list1.add("101"); // 將String先轉為Int類型,再打印加5的值。以下兩種寫法均可,任選其一即可 list1.stream().map(s -> Integer.valueOf(s)).forEach(s -> System.out.println(s + 5)); list1.stream().map(Integer::parseInt).forEach(s -> System.out.println(s + 5));示例代碼:
// 將list和list1的流合并 Stream.concat(list.stream(), list1.stream()).forEach(System.out::println);注:
- 拼接方法,返回一個新流;
- 終結方法,返回的是最終的值。
前面講的count和forEach方法為終結方法,其余的均是拼接方法(也除了collection方法)。
總結
以上是生活随笔為你收集整理的Java学习day08--方法引用和Stream流的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 提供数据接口公司总结
- 下一篇: 11 Animation动画