歡迎您光臨本站 註冊首頁

Java Stream流知識總結

←手機掃碼閱讀     zmcjlove @ 2020-06-17 , reply:0

說明

在Java 8中,得益於Lambda所帶來的函數式編程,引入了一個全新的Stream概念,用於解決已有集合類庫既有的弊端

遍歷
 

傳統集合在於使用循環遍歷

Java 8的Lambda讓我們可以更加專注於做什麼(What),而不是怎麼做(How),這點此前已經結合內部類進行 了對比說明。現在,我們仔細體會一下上例代碼,可以發現:

  • for循環的語法就是“怎麼做”

  • for循環的循環體才是“做什麼”

傳統集合遍歷

  import java.util.ArrayList;  import java.util.List;    /**   * @author tanglei   * @date 2020/6/10 10:21 下午   */  public class NormalFilter {   public static void main(String[] args) {    Listlist = new ArrayList<>();    list.add("張無忌");    list.add("周芷若");    list.add("趙敏");    list.add("張強");    list.add("張三丰");      ListzhangList = new ArrayList<>();    for(String name : list){     if(name.startsWith("張")){      zhangList.add(name);     }    }      ListshortList = new ArrayList<>();    for(String name : zhangList){     if(name.length() == 3){      shortList.add(name);     }    }      for (String name : shortList){     System.out.println(name);    }   }  }

 

Stream的優雅

  import java.util.ArrayList;  import java.util.List;    /**   * @author tanglei   * @date 2020/6/10 10:28 下午   */  public class StreamFilter {   public static void main(String[] args) {    Listlist = new ArrayList<>();    list.add("張無忌");    list.add("周芷若");    list.add("趙敏");    list.add("張強");    list.add("張三丰");      list.stream()      .filter(s -> s.startsWith("張"))      .filter(s -> s.length() == 3)      .forEach(System.out::println);   }  }

 

Stream的優雅使用stream可以十分簡單明瞭的體現代碼的邏輯

“Stream流”其實是一個集合元素的函數模型,它並不是集合,也不是數據結構,其本身並不存儲任何 元素(或其地址值

獲取流

  • 所有的 Collection 集合都可以通過 stream 默認方法獲取流;

  • Stream 接口的靜態方法 of 可以獲取數組對應的流。

根據Collection獲取流

  public static void main(String[] args) {  	Listlist = new ArrayList<>();  	Streamstream1 = list.stream();  	Setset = new HashSet<>();  	Streamstream2 = set.stream();  	Vectorvector = new Vector<>();  }

 

根據Map獲取流

  public static void main(String[] args) {  	Mapmap = new HashMap<>();  	StreamkeyStream = map.keySet().stream();  	StreamvalueStream = map.values().stream(); 	Stream<Map.Entry> entryStream = 		map.entrySet().stream();  }

 

根據數組獲取流

  public static void main(String[] args) {  	String[] array = { "張無忌", "張翠山", "張三丰", "張一元" };  	Streamstream = Stream.of(array);   }

 

常用方法

逐一處理:forEach
 會將每一個流元素交給該函數進行處理

  public static void main(String[] args) {  	Streamstream = Stream.of("張無忌", "張三丰", "周芷若");  	stream.forEach(name�> System.out.println(name));   }

 

過濾:filter
 可以通過 filter 方法將一個流轉換成另一個子集流

  public static void main(String[] args) {  	Streamoriginal = Stream.of("張無忌", "張三丰", "周芷若");  	Streamresult = original.filter(s �> 	s.startsWith("張"));   }

 

映射:map
 如果需要將流中的元素映射到另一個流中

  public static void main(String[] args) {  	Streamoriginal = Stream.of("10", "12", "18");  	Streamresult = original.map(str�>Integer.parseInt(str));   }

 

統計個數:count
 數一數其中的元素個數

  public static void main(String[] args) {  	Streamoriginal = Stream.of("張無忌", "張三丰", "周芷若");    Streamresult = original.filter(s �> s.startsWith("張"));   System.out.println(result.count()); // 2  }

 

取用前幾個:limit
 可以對流進行截取,只取用前n個

  public static void main(String[] args) {  	Streamoriginal = Stream.of("張無忌", "張三丰", "周芷若");    Streamresult = original.limit(2); 	   System.out.println(result.count()); // 2  }

 

跳過前幾個:skip
 如果希望跳過前幾個元素

  public static void main(String[] args) {  	Streamoriginal = Stream.of("張無忌", "張三丰", "周芷若");    Streamresult = original.skip(2);    System.out.println(result.count()); // 1  }

 

組合:concat
 如果有兩個流,希望合併成為一個流

  public static void main(String[] args) {  	StreamstreamA = Stream.of("張無忌"); 	   StreamstreamB = Stream.of("張翠山");    Streamresult = Stream.concat(streamA, streamB);  }



[zmcjlove ] Java Stream流知識總結已經有219次圍觀

http://coctec.com/docs/java/show-post-238845.html