Java高級特性-001-Java SE 8 的流庫

Java SE 8 的流庫

        java 8 API添加了一個新的抽象稱爲流Stream,可以讓你以一種聲明的方式處理數據。>        Stream 使用一種類似用 SQL 語句從數據庫查詢數據的直觀方式來提供一種對 Java 集合運算和表達的高階抽象。
        Stream API可以極大提高Java程序員的生產力,讓程序員寫出高效率、乾淨、簡潔的代碼。
        這種風格將要處理的元素集合看作一種流, 流在管道中傳輸, 並且可以在管道的節點上進行處理, 比如篩選, 排序,聚合等。
        元素流在管道中經過中間操作(intermediate operation)的處理,最後由最終操作(terminal operation)得到前面處理的結果。

java.util.stream能做什麼

  1. Stream 是對集合(Collection)對象功能的增強,它專注於對集合對象進行各種非常便利、高效的聚合操作(aggregate operation),或者大批量數據操作 (bulk data operation)
  2. java.util.stream 是一個函數式語言+多核時代綜合影響的產物
  3. 結合Lambda 表達式,極大的提高編程效率和程序可讀性
    在這裏插入圖片描述

Stream 對集合操作

        流表面上看起來和集合很類似,都可以讓我們轉換和獲取數據。但它們之間存在着顯著的差異:

  1. 流並不存儲其元素。
  2. 流的操作不會修改其數據源。
  3. 流的操作是儘可能惰性執行的。

List集合

alice.txt在CountLongWords.java文件包名所寫的根目錄

public class CountLongWords {

	public static void main(String[] args) {
		List<String> words = null;
		String contents = null;
		try {
			contents = new String(Files.readAllBytes(Paths.get("alice.txt")), StandardCharsets.UTF_8);
			words = Arrays.asList(contents.split("\\PL+"));
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println(contents);
		System.out.println(words);
		
		long count = 0;
		for (String w : words) {
			if (w.length() > 4)
				count++;
		}
		System.out.println("1、alice.txt " + count);

		count = words.stream().filter(w -> w.length() > 4).count(); //爲集合創建串行流。
		System.out.println("2、alice.txt " + count);
		count = words.parallelStream().filter(w -> w.length() > 4).count(); //爲集合創建並行流。
		System.out.println("3、alice.txt " + count);
	}
}

在這裏插入圖片描述

數組處理

不像集合直接調用,需要先轉換成stream
        基本類型流有專門的類型:IntStream、LongStream、DoubleStream
注意:區別對象數組和一般數組,

public class StreamTester {

	public static void main(String[] args) {
		Integer[] sixNums = { 1, 2, 3, 4, 5, 6 };
		Integer[] evens = Stream.of(sixNums).filter(n -> n % 2 == 0).toArray(Integer[]::new);
		Stream.of(evens).forEach(System.out::println);

		int[] nums = { 1, 2, 3, 4, 5, 6 };
		Stream.of(nums).forEach(System.out::println);
		IntStream.of(nums).forEach(System.out::println);
	}
}

在這裏插入圖片描述

Stream相關函數

在這裏插入圖片描述

相關文檔

Java 8 中的 Streams API 詳解
Package java.util.stream
Java8學習之Stream(流)
Java 8中Stream API的這些奇技淫巧!你都Get到了嗎?
簡潔又快速地處理集合——Java8 Stream(上)
簡潔又快速地處理集合——Java8 Stream(下)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章