Java Primitive Type Stream - Java 147

Java Primitive Type Stream – Java 147

Java Primitive Type Stream

提供基本型別轉換成 Primitive Stream ,支援 int 、 long 、 double 、 array 等,可以避免大量不必要的物件建立,本篇增加了範例,並透過單元測試來驗證產出結果。

檔案目錄

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

單元測試

Primitive Type Streams API 是 Java 8 中增加的特性之一,允許通過提供聲明性 API 來方便且更有效地處理集合和其他元素序列。

intStreamOf

建立一個 IntStream,增加三個元素。

	@Test
	public void intStreamOf() {
		int expectedCount = 3;
		IntStream stream = IntStream.of(1, 2, 3);
		// stream.forEach(System.out::println);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}
1
2
3

intStreamRange

建立一個 IntStream,增加範圍內三個元素。

	@Test
	public void intStreamRange() {
		int expectedCount = 3;
		IntStream stream = IntStream.range(1, 4);
		// stream.forEach(System.out::println);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}
1
2
3

intStreamRangeClosed

Primitive Type Streams 建立一個 IntStream,增加包含範圍共四個元素。

	@Test
	public void intStreamRangeClosed() {
		int expectedCount = 4;
		IntStream stream = IntStream.rangeClosed(1, 4);
		// stream.forEach(System.out::println);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}
1
2
3
4	

longStreamOf

Primitive Type Streams 建立一個 LongStream,增加三個元素。

	@Test
	public void longStreamOf() {
		int expectedCount = 3;
		LongStream stream = LongStream.of(4, 5, 6);
		// stream.forEach(System.out::println);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}
4
5
6

longStreamRange

Primitive Type Streams 建立一個 LongStream,增加範圍內三個元素。

	@Test
	public void longStreamRange() {
		int expectedCount = 3;
		LongStream stream = LongStream.range(4, 7);
		// stream.forEach(System.out::println);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}
4
5
6

longStreamRangeClosed

建立一個 LongStream,增加包含範圍共四個元素。

	@Test
	public void longStreamRangeClosed() {
		int expectedCount = 4;
		LongStream stream = LongStream.rangeClosed(4, 7);
		// stream.forEach(System.out::println);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}
4
5
6
7	

doubleStreamOf

建立一個 DoubleStream,增加三個元素。

	@Test
	public void doubleStreamOf() {
		int expectedCount = 3;
		DoubleStream stream = DoubleStream.of(7.0, 8.0, 9.0);
		// stream.forEach(System.out::println);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}
7.0
8.0
9.0

arraysIntStream

使用 Arrays.stream 將 int[] 轉成 IntStream,內有三個元素。

	@Test
	public void arraysIntStream() {
		int expectedCount = 3;
		IntStream stream = Arrays.stream(new int[] { 1, 2, 3 });
		// stream.forEach(System.out::println);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}
1
2
3

arraysLongStream

使用 Arrays.stream 將 long[] 轉成 LongStream,內有三個元素。

	@Test
	public void arraysLongStream() {
		int expectedCount = 3;
		LongStream stream = Arrays.stream(new long[] { 4, 5, 6 });
		// stream.forEach(System.out::println);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}
4
5
6

arraysDoubleStream

使用 Arrays.stream 將 double[] 轉成 DoubleStream,內有三個元素。

	@Test
	public void arraysDoubleStream() {
		int expectedCount = 3;
		DoubleStream stream = Arrays.stream(new double[] { 7.0, 8.0, 9.0 });
		// stream.forEach(System.out::println);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}	
7.0
8.0
9.0

PrimitiveTypeStreamsTest.java

Java Streams with Primitive Type 新增單元測試,驗證是否符合預期 。

package org.ruoxue.java_147.stream;

import static org.junit.Assert.assertEquals;

import java.util.Arrays;
import java.util.stream.DoubleStream;
import java.util.stream.IntStream;
import java.util.stream.LongStream;

import org.junit.Test;

public class PrimitiveTypeStreamsTest {

	@Test
	public void intStreamOf() {
		int expectedCount = 3;
		IntStream stream = IntStream.of(1, 2, 3);
		// stream.forEach(System.out::println);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}

	@Test
	public void intStreamRange() {
		int expectedCount = 3;
		IntStream stream = IntStream.range(1, 4);
		// stream.forEach(System.out::println);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}

	@Test
	public void intStreamRangeClosed() {
		int expectedCount = 4;
		IntStream stream = IntStream.rangeClosed(1, 4);
		// stream.forEach(System.out::println);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}

	@Test
	public void longStreamOf() {
		int expectedCount = 3;
		LongStream stream = LongStream.of(4, 5, 6);
		// stream.forEach(System.out::println);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}

	@Test
	public void longStreamRange() {
		int expectedCount = 3;
		LongStream stream = LongStream.range(4, 7);
		// stream.forEach(System.out::println);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}

	@Test
	public void longStreamRangeClosed() {
		int expectedCount = 4;
		LongStream stream = LongStream.rangeClosed(4, 7);
		// stream.forEach(System.out::println);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}

	@Test
	public void doubleStreamOf() {
		int expectedCount = 3;
		DoubleStream stream = DoubleStream.of(7.0, 8.0, 9.0);
		// stream.forEach(System.out::println);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}

	@Test
	public void arraysIntStream() {
		int expectedCount = 3;
		IntStream stream = Arrays.stream(new int[] { 1, 2, 3 });
		// stream.forEach(System.out::println);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}

	@Test
	public void arraysLongStream() {
		int expectedCount = 3;
		LongStream stream = Arrays.stream(new long[] { 4, 5, 6 });
		// stream.forEach(System.out::println);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}

	@Test
	public void arraysDoubleStream() {
		int expectedCount = 3;
		DoubleStream stream = Arrays.stream(new double[] { 7.0, 8.0, 9.0 });
		// stream.forEach(System.out::println);
		long count = stream.peek(System.out::println).count();
		assertEquals(expectedCount, count);
	}
}

心得分享

Java Streams with Primitive Type 提供了 3 種 基本型別 Stream ,從 int 、 long 、 double 或從 int[] 、 long[] 、 double[] 陣列轉成 Stream, Primitive Type Streams in Java with Examples 透過單元測試,驗證了各種基本類型的轉換。

發佈留言