Java Stream Initialization - Java 147

Java Stream Initialization – Java 147

Java Stream Initialization

初始化 Stream 物件,其中的元素是特定類型的物件,大多數操作,會傳回 Stream 本身,如同流式風格 Fluent Style ,可以對操作進行優化,比如延遲執行 Laziness 和短路 Short-circuiting 操作, Stream Java Initialization 介紹常見的 empty 、 iterate 、 iterator 等方法初始化 Stream ,本篇增加了範例,並透過單元測試來驗證產出結果。

檔案目錄

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

單元測試

Initialization of Stream 提供初始化 Stream 。

empty

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

	@Test
	public void empty() {
		int expectedCount = 0;
		Stream<String> stream = Stream.empty();
		System.out.println(stream);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);

		Stream<Integer> intStream = Stream.empty();
		System.out.println(intStream);
		count = intStream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}
java.util.stream.ReferencePipeline$Head@694f9431
java.util.stream.ReferencePipeline$Head@5c8da962

iterate

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

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

		Stream<Integer> intStream = Stream.iterate(2, n -> n * n).limit(3);
		System.out.println(intStream);
		count = intStream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}
java.util.stream.SliceOps$1@5fdef03a
Coconut
Coconut1
Coconut11
java.util.stream.SliceOps$1@77556fd
2
4
16

iterator

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

	@Test
	public void iterator() {
		int expectedCount = 3;
		List<String> list = Arrays.asList("Coconut", "Lichee", "Plum");
		Spliterator<String> spliterator = Spliterators.spliteratorUnknownSize(list.iterator(), Spliterator.NONNULL);
		Stream<String> stream = StreamSupport.stream(spliterator, false);
		System.out.println(stream);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);

		List<Integer> intList = Arrays.asList(1, 2, 3);
		Spliterator<Integer> intSpliterator = Spliterators.spliteratorUnknownSize(intList.iterator(),
				Spliterator.NONNULL);
		Stream<Integer> intStream = StreamSupport.stream(intSpliterator, false);
		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

iterable

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

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

		Iterable<Integer> intIterable = Arrays.asList(1, 2, 3);
		Stream<Integer> intStream = StreamSupport.stream(intIterable.spliterator(), false);
		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

intStream

Initializing Stream in Java 建立一個 IntStream ,初始化三個元素。

	@Test
	public void intStream() {
		int expectedCount = 3;
		IntStream intStream = IntStream.of(10, 20, 30);
		long count = intStream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}
10
20
30

longStream

Initializing Stream in Java 建立一個 LongStream ,初始化三個元素。

	@Test
	public void longStream() {
		int expectedCount = 3;
		LongStream stream = LongStream.of(40, 50, 60);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}
40
50
60

doubleStream

Initializing Stream in Java 建立一個 DoubleStream ,初始化三個元素。

	@Test
	public void doubleStream() {
		int expectedCount = 3;
		DoubleStream stream = DoubleStream.of(70.0, 80.0, 90.0);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}
70.0
80.0
90.0

StreamInitializationTest.java

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

package org.ruoxue.java_147.stream;

import static org.junit.Assert.*;

import java.util.Arrays;
import java.util.List;
import java.util.Spliterator;
import java.util.Spliterators;
import java.util.stream.DoubleStream;
import java.util.stream.IntStream;
import java.util.stream.LongStream;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;

import org.junit.Test;

public class StreamInitializationTest {

	@Test
	public void empty() {
		int expectedCount = 0;
		Stream<String> stream = Stream.empty();
		System.out.println(stream);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);

		Stream<Integer> intStream = Stream.empty();
		System.out.println(intStream);
		count = intStream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}

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

		Stream<Integer> intStream = Stream.iterate(2, n -> n * n).limit(3);
		System.out.println(intStream);
		count = intStream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}

	@Test
	public void iterator() {
		int expectedCount = 3;
		List<String> list = Arrays.asList("Coconut", "Lichee", "Plum");
		Spliterator<String> spliterator = Spliterators.spliteratorUnknownSize(list.iterator(), Spliterator.NONNULL);
		Stream<String> stream = StreamSupport.stream(spliterator, false);
		System.out.println(stream);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);

		List<Integer> intList = Arrays.asList(1, 2, 3);
		Spliterator<Integer> intSpliterator = Spliterators.spliteratorUnknownSize(intList.iterator(),
				Spliterator.NONNULL);
		Stream<Integer> intStream = StreamSupport.stream(intSpliterator, false);
		System.out.println(intStream);
		count = intStream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}

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

		Iterable<Integer> intIterable = Arrays.asList(1, 2, 3);
		Stream<Integer> intStream = StreamSupport.stream(intIterable.spliterator(), false);
		System.out.println(intStream);
		count = intStream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}

	@Test
	public void intStream() {
		int expectedCount = 3;
		IntStream intStream = IntStream.of(10, 20, 30);
		long count = intStream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}

	@Test
	public void longStream() {
		int expectedCount = 3;
		LongStream stream = LongStream.of(40, 50, 60);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}

	@Test
	public void doubleStream() {
		int expectedCount = 3;
		DoubleStream stream = DoubleStream.of(70.0, 80.0, 90.0);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}
}

心得分享

Java Initializing Stream 初始化 Stream 流的來源,可以是集合、陣列、 I/O channel 或 generator 產生器等,Initializing Stream in Java 提供了幾種 empty 、 iterate 、 iterator 等方法初始化操作範例。

發佈留言