Initialize Stream in Java - Java 147

Initialize Stream in Java – Java 147

Initialize Stream in Java

初始化 Stream 物件,其中的元素是特定類型的物件,形成一個隊列,流的來源,可以是集合、陣列、 I/O channel 或 generator 產生器等,可以聚合操作類似 SQL 語句一樣的操作,使用 collection 、 stream 、 builder 、 generate 等方法建立 Stream 物件, Initialize Stream Java 本篇增加了範例,並透過單元測試來驗證產出結果。

檔案目錄

./
   +- src
       +- test
       |   +- org
       |       +- ruoxue
       |           +- java_147
       |               +- stream
       |                   +- InitializeStreamTest.java   

單元測試

Java Initialize Stream 提供初始化 Stream 。

collection

Java Initialize Stream 建立一個 Stream ,初始化三個元素。

	@Test
	public void collection() {
		int expectedCount = 3;
		List<String> list = Arrays.asList("Coconut", "Lichee", "Plum");
		Stream<String> stream = list.stream();
		System.out.println(stream);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);

		List<Integer> intList = Arrays.asList(1, 2, 3);
		Stream<Integer> intStream = intList.stream();
		System.out.println(intStream);
		count = intStream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}
java.util.stream.ReferencePipeline$Head@694f9431
Coconut
Lichee
Plum
java.util.stream.ReferencePipeline$Head@5c8da962
1
2
3

stream

Java Initialize Stream 建立一個 Stream ,初始化三個元素。

	@Test
	public void stream() {
		int expectedCount = 3;
		Stream<String> stream = Stream.of("Coconut", "Lichee", "Plum");
		System.out.println(stream);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);

		String[] array = new String[] { "Coconut", "Lichee", "Plum" };
		stream = Stream.of(array);
		System.out.println(stream);
		count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);

		Stream<Integer> intStream = Stream.of(1, 2, 3);
		System.out.println(intStream);
		count = intStream.peek(System.out::println).count();
		assertEquals(expectedCount, count);

		int[] intArray = new int[] { 1, 2, 3 };
		Stream<int[]> streamIntArray = Stream.of(intArray);
		IntStream intArrayStream = streamIntArray.flatMapToInt(e -> Arrays.stream(e));
		System.out.println(intArrayStream);
		count = intArrayStream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}
java.util.stream.ReferencePipeline$Head@694f9431
Coconut
Lichee
Plum
java.util.stream.ReferencePipeline$Head@5c8da962
Coconut
Lichee
Plum
java.util.stream.ReferencePipeline$Head@2c13da15
1
2
3
java.util.stream.ReferencePipeline$8@16f65612
1
2
3

array

Java Initialize Stream 建立一個 Stream ,初始化三個元素。

	@Test
	public void array() {
		int expectedCount = 3;
		String[] array = new String[] { "Coconut", "Lichee", "Plum" };
		Stream<String> stream = Arrays.stream(array);
		System.out.println(stream);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);

		stream = Arrays.stream(array, 0, 2);
		System.out.println(stream);
		count = stream.peek(System.out::println).count();
		assertEquals(2, count);

		int[] intArray = new int[] { 1, 2, 3 };
		Stream<Integer> intStream = Arrays.stream(intArray).boxed();
		System.out.println(intStream);
		count = intStream.peek(System.out::println).count();
		assertEquals(expectedCount, count);

		intStream = Arrays.stream(intArray, 0, 2).boxed();
		System.out.println(intStream);
		count = intStream.peek(System.out::println).count();
		assertEquals(2, count);
	}
java.util.stream.ReferencePipeline$Head@694f9431
Coconut
Lichee
Plum
java.util.stream.ReferencePipeline$Head@5c8da962
Coconut
Lichee
java.util.stream.IntPipeline$4@9e89d68
1
2
3
java.util.stream.IntPipeline$4@16f65612
1
2

builder

Stream Initialization Java 建立一個 Stream ,初始化三個元素。

	@Test
	public void builder() {
		int expectedCount = 3;
		Stream.Builder<String> builder = Stream.builder();
		Stream<String> stream = builder.add("Coconut").add("Lichee").add("Plum").build();
		System.out.println(stream);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);

		Stream.Builder<Integer> intBuilder = Stream.builder();
		Stream<Integer> intStream = intBuilder.add(1).add(2).add(3).build();
		System.out.println(intStream);
		count = intStream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}
java.util.stream.ReferencePipeline$Head@694f9431
Coconut
Lichee
Plum
java.util.stream.ReferencePipeline$Head@5c8da962
1
2
3

generate

Stream Initialization Java 建立一個 Stream ,初始化三個元素。

	@Test
	public void generate() {
		int expectedCount = 3;
		Stream<String> stream = Stream.generate(() -> "Lichee").limit(3);
		System.out.println(stream);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);

		stream = Stream.generate(() -> UUID.randomUUID().toString()).limit(3);
		System.out.println(stream);
		count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);

		Stream<Integer> intStream = Stream.generate(() -> (int) (Math.random() * 100)).limit(3);
		System.out.println(intStream);
		count = intStream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}
java.util.stream.SliceOps$1@5fdef03a
Lichee
Lichee
Lichee
java.util.stream.SliceOps$1@77556fd
703d06a9-f6ea-4245-858e-3a9fd29d18f4
c9ef3638-257a-4546-9896-3b0456e180a2
1b37f994-42a4-4088-a4d7-b95a2c43905a
java.util.stream.SliceOps$1@e6ea0c6
84
27
19

pattern

Stream Initialization Java 建立一個 ImmutableList 不可變的 List ,初始化三個元素。

	@Test
	public void pattern() {
		int expectedCount = 1;
		Pattern pattern = Pattern.compile("^L");
		List<String> list = Arrays.asList("Coconut", "Lichee", "Plum");
		Stream<String> stream = list.stream().filter(pattern.asPredicate());
		System.out.println(stream);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}

java.util.stream.ReferencePipeline$2@3b22cdd0
Lichee

InitializeStreamTest.java

Stream Initialization Java 新增單元測試,驗證 Java Stream Initialize 是否符合預期。

package org.ruoxue.java_147.stream;

import static org.junit.Assert.*;

import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import java.util.regex.Pattern;
import java.util.stream.IntStream;
import java.util.stream.Stream;

import org.junit.Test;

public class InitializeStreamTest {

	@Test
	public void collection() {
		int expectedCount = 3;
		List<String> list = Arrays.asList("Coconut", "Lichee", "Plum");
		Stream<String> stream = list.stream();
		System.out.println(stream);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);

		List<Integer> intList = Arrays.asList(1, 2, 3);
		Stream<Integer> intStream = intList.stream();
		System.out.println(intStream);
		count = intStream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}

	@Test
	public void stream() {
		int expectedCount = 3;
		Stream<String> stream = Stream.of("Coconut", "Lichee", "Plum");
		System.out.println(stream);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);

		String[] array = new String[] { "Coconut", "Lichee", "Plum" };
		stream = Stream.of(array);
		System.out.println(stream);
		count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);

		Stream<Integer> intStream = Stream.of(1, 2, 3);
		System.out.println(intStream);
		count = intStream.peek(System.out::println).count();
		assertEquals(expectedCount, count);

		int[] intArray = new int[] { 1, 2, 3 };
		Stream<int[]> streamIntArray = Stream.of(intArray);
		IntStream intArrayStream = streamIntArray.flatMapToInt(e -> Arrays.stream(e));
		System.out.println(intArrayStream);
		count = intArrayStream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}

	@Test
	public void array() {
		int expectedCount = 3;
		String[] array = new String[] { "Coconut", "Lichee", "Plum" };
		Stream<String> stream = Arrays.stream(array);
		System.out.println(stream);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);

		stream = Arrays.stream(array, 0, 2);
		System.out.println(stream);
		count = stream.peek(System.out::println).count();
		assertEquals(2, count);

		int[] intArray = new int[] { 1, 2, 3 };
		Stream<Integer> intStream = Arrays.stream(intArray).boxed();
		System.out.println(intStream);
		count = intStream.peek(System.out::println).count();
		assertEquals(expectedCount, count);

		intStream = Arrays.stream(intArray, 0, 2).boxed();
		System.out.println(intStream);
		count = intStream.peek(System.out::println).count();
		assertEquals(2, count);
	}

	@Test
	public void builder() {
		int expectedCount = 3;
		Stream.Builder<String> builder = Stream.builder();
		Stream<String> stream = builder.add("Coconut").add("Lichee").add("Plum").build();
		System.out.println(stream);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);

		Stream.Builder<Integer> intBuilder = Stream.builder();
		Stream<Integer> intStream = intBuilder.add(1).add(2).add(3).build();
		System.out.println(intStream);
		count = intStream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}

	@Test
	public void generate() {
		int expectedCount = 3;
		Stream<String> stream = Stream.generate(() -> "Lichee").limit(3);
		System.out.println(stream);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);

		stream = Stream.generate(() -> UUID.randomUUID().toString()).limit(3);
		System.out.println(stream);
		count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);

		Stream<Integer> intStream = Stream.generate(() -> (int) (Math.random() * 100)).limit(3);
		System.out.println(intStream);
		count = intStream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}

	@Test
	public void pattern() {
		int expectedCount = 1;
		Pattern pattern = Pattern.compile("^L");
		List<String> list = Arrays.asList("Coconut", "Lichee", "Plum");
		Stream<String> stream = list.stream().filter(pattern.asPredicate());
		System.out.println(stream);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}
}

心得分享

Java Stream Initialize 初始化 Stream 物件,大多數操作,會傳回 Stream 本身,以便可以對結果進行流水線的處理,如同流式風格 Fluent Style ,可以對操作進行優化,比如延遲執行 Laziness 和短路 Short-circuiting 操作, Stream Initialization Java 提供了幾種 Stream 初始化的操作範例,使用單元測試驗證產出結果。

發佈留言