Table of Contents
ToggleJava 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 等方法初始化操作範例。