Arrays Class in Java with Examples - Java 147

Arrays Class in Java with Examples – Java 147

Arrays Class in Java with Examples

支援陣列操作,提供建立、比較、排序、搜索、串流和轉換陣列,介紹常見的 fill 、 paralleSetAll 、 stream 、 spliterator 、 parallelPrefix 等方法,Arrays Class in Java 陣列的一部分,由靜態方法和物件類的方法組成,本篇增加了範例,並透過單元測試來驗證產出結果。

檔案目錄

./
   +- src
       +- test
       |   +- org
       |       +- ruoxue
       |           +- java_147
       |               +- array
       |                   +- ArraysWithExamplesTest.java   

單元測試

Class Arrays Java 陣列類別工具,提供填充、並行更新、串流操作陣列中的元素。

fill

建立一個 Array ,內有三個元素,填充元素。

	@Test
	public void fill() {
		String[] array = new String[] { "Durian", "Guava", "Pitaya" };
		System.out.println(Arrays.toString(array));
		Arrays.fill(array, "Durian");
		System.out.println(Arrays.toString(array));
		assertThat(array).containsExactly("Durian", "Durian", "Durian");

		int[] intArray = new int[] { Integer.MAX_VALUE, -1, 3 };
		System.out.println(Arrays.toString(intArray));
		Arrays.fill(intArray, -1);
		System.out.println(Arrays.toString(intArray));
		assertThat(intArray).containsExactly(-1, -1, -1);
	}
[Durian, Guava, Pitaya]
[Durian, Durian, Durian]
[2147483647, -1, 3]
[-1, -1, -1]

setAll

Class Arrays Java 建立一個 Array ,內有三個元素,依條件更新元素。

	@Test
	public void setAll() {
		String[] array = new String[] { "Durian", "Guava", "Pitaya" };
		System.out.println(Arrays.toString(array));
		Arrays.setAll(array, index -> {
			String value = array[index];
			if (value.startsWith("G")) {
				return value.toUpperCase();
			}
			return value;
		});
		System.out.println(Arrays.toString(array));
		assertThat(array).containsExactly("Durian", "GUAVA", "Pitaya");

		int[] intArray = new int[] { Integer.MAX_VALUE, -1, 3 };
		System.out.println(Arrays.toString(intArray));
		Arrays.setAll(intArray, index -> intArray[index] - 100);
		System.out.println(Arrays.toString(intArray));
		assertThat(intArray).containsExactly(2147483547, -101, -97);
	}
[Durian, Guava, Pitaya]
[Durian, GUAVA, Pitaya]
[2147483647, -1, 3]
[2147483547, -101, -97]

paralleSetAll

Class Arrays Java 建立一個 Array ,內有三個元素,依條件並行更新元素。

	@Test
	public void paralleSetAll() {
		String[] array = new String[] { "Durian", "Guava", "Pitaya" };
		System.out.println(Arrays.toString(array));
		Arrays.parallelSetAll(array, index -> {
			String value = array[index];
			if (value.contains("a")) {
				return value.toUpperCase();
			}
			return value;
		});
		System.out.println(Arrays.toString(array));
		assertThat(array).containsExactly("DURIAN", "GUAVA", "PITAYA");

		int[] intArray = new int[] { Integer.MAX_VALUE, -1, 3 };
		System.out.println(Arrays.toString(intArray));
		Arrays.setAll(intArray, index -> intArray[index] - 100);
		System.out.println(Arrays.toString(intArray));
		assertThat(intArray).containsExactly(2147483547, -101, -97);
	}
[Durian, Guava, Pitaya]
[DURIAN, GUAVA, PITAYA]
[2147483647, -1, 3]
[2147483547, -101, -97]

stream

Class Arrays Java 建立一個 Array ,內有三個元素,執行串流,將字串轉成大寫或小寫。

	@Test
	public void stream() {
		String[] array = new String[] { "Durian", "Guava", "Pitaya" };
		System.out.println(Arrays.toString(array));
		Stream<String> stream = Arrays.stream(array);
		List<String> result = stream.map(e -> e.toUpperCase()).collect(Collectors.toList());
		System.out.println(result);
		assertThat(result).containsExactly("DURIAN", "GUAVA", "PITAYA");

		int[] intArray = new int[] { Integer.MAX_VALUE, -1, 3 };
		System.out.println(Arrays.toString(intArray));
		IntStream intStream = Arrays.stream(intArray);
		List<Integer> intResult = intStream.map(e -> e - 100).boxed().collect(Collectors.toList());
		System.out.println(intResult);
		assertThat(intResult).containsExactly(2147483547, -101, -97);
	}
[Durian, Guava, Pitaya]
[DURIAN, GUAVA, PITAYA]
[2147483647, -1, 3]
[2147483547, -101, -97]

streamIntArray

Class Arrays Java 建立一個 Array ,內有三個元素,執行串流,數字運算。

	@Test
	public void streamIntArray() {
		int[] array = new int[] { 1, -1, 3 };
		System.out.println(Arrays.toString(array));
		IntStream stream = Arrays.stream(array);
		List<Integer> result = stream.map(e -> e * 10).boxed().collect(Collectors.toList());
		System.out.println(result);
		assertThat(result).containsExactly(10, -10, 30);

		Stream<int[]> streamIntArray = Stream.of(array);
		result = streamIntArray.flatMapToInt(e -> Arrays.stream(e)).map(e -> e * 10).boxed()
				.collect(Collectors.toList());
		System.out.println(result);
		assertThat(result).containsExactly(10, -10, 30);
	}
[1, -1, 3]
[10, -10, 30]
[10, -10, 30]

spliterator

Arrays Class 建立一個 Array ,內有三個元素,使用 spliterator 取得元素,等同於 iterator.hasNext 和 iterator.next。

	@Test
	public void spliterator() {
		String[] array = new String[] { "Durian", "Guava", "Pitaya" };
		Spliterator<String> sit = Arrays.spliterator(array);
		sit.tryAdvance(e -> System.out.println(e));
		System.out.println("----------");
		sit.forEachRemaining(e -> System.out.println(e));

		System.out.println("----------");
		sit = Arrays.spliterator(array);
		while (sit.tryAdvance(e -> System.out.println(e))) {
		}
	}
Durian
----------
Guava
Pitaya
----------
Durian
Guava
Pitaya

ArraysWithExamplesTest.java

Class Arrays 新增單元測試,驗證是否符合預期。

package org.ruoxue.java_147.array;

import static org.assertj.core.api.Assertions.assertThat;

import java.util.Arrays;
import java.util.List;
import java.util.Spliterator;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;

import org.junit.Test;

public class ArraysWithExamplesTest {

	@Test
	public void fill() {
		String[] array = new String[] { "Durian", "Guava", "Pitaya" };
		System.out.println(Arrays.toString(array));
		Arrays.fill(array, "Durian");
		System.out.println(Arrays.toString(array));
		assertThat(array).containsExactly("Durian", "Durian", "Durian");

		int[] intArray = new int[] { Integer.MAX_VALUE, -1, 3 };
		System.out.println(Arrays.toString(intArray));
		Arrays.fill(intArray, -1);
		System.out.println(Arrays.toString(intArray));
		assertThat(intArray).containsExactly(-1, -1, -1);
	}

	@Test
	public void setAll() {
		String[] array = new String[] { "Durian", "Guava", "Pitaya" };
		System.out.println(Arrays.toString(array));
		Arrays.setAll(array, index -> {
			String value = array[index];
			if (value.startsWith("G")) {
				return value.toUpperCase();
			}
			return value;
		});
		System.out.println(Arrays.toString(array));
		assertThat(array).containsExactly("Durian", "GUAVA", "Pitaya");

		int[] intArray = new int[] { Integer.MAX_VALUE, -1, 3 };
		System.out.println(Arrays.toString(intArray));
		Arrays.setAll(intArray, index -> intArray[index] - 100);
		System.out.println(Arrays.toString(intArray));
		assertThat(intArray).containsExactly(2147483547, -101, -97);
	}

	@Test
	public void paralleSetAll() {
		String[] array = new String[] { "Durian", "Guava", "Pitaya" };
		System.out.println(Arrays.toString(array));
		Arrays.parallelSetAll(array, index -> {
			String value = array[index];
			if (value.contains("a")) {
				return value.toUpperCase();
			}
			return value;
		});
		System.out.println(Arrays.toString(array));
		assertThat(array).containsExactly("DURIAN", "GUAVA", "PITAYA");

		int[] intArray = new int[] { Integer.MAX_VALUE, -1, 3 };
		System.out.println(Arrays.toString(intArray));
		Arrays.setAll(intArray, index -> intArray[index] - 100);
		System.out.println(Arrays.toString(intArray));
		assertThat(intArray).containsExactly(2147483547, -101, -97);
	}

	@Test
	public void stream() {
		String[] array = new String[] { "Durian", "Guava", "Pitaya" };
		System.out.println(Arrays.toString(array));
		Stream<String> stream = Arrays.stream(array);
		List<String> result = stream.map(e -> e.toUpperCase()).collect(Collectors.toList());
		System.out.println(result);
		assertThat(result).containsExactly("DURIAN", "GUAVA", "PITAYA");

		int[] intArray = new int[] { Integer.MAX_VALUE, -1, 3 };
		System.out.println(Arrays.toString(intArray));
		IntStream intStream = Arrays.stream(intArray);
		List<Integer> intResult = intStream.map(e -> e - 100).boxed().collect(Collectors.toList());
		System.out.println(intResult);
		assertThat(intResult).containsExactly(2147483547, -101, -97);
	}

	@Test
	public void streamIntArray() {
		int[] array = new int[] { 1, -1, 3 };
		System.out.println(Arrays.toString(array));
		IntStream stream = Arrays.stream(array);
		List<Integer> result = stream.map(e -> e * 10).boxed().collect(Collectors.toList());
		System.out.println(result);
		assertThat(result).containsExactly(10, -10, 30);

		Stream<int[]> streamIntArray = Stream.of(array);
		result = streamIntArray.flatMapToInt(e -> Arrays.stream(e)).map(e -> e * 10).boxed()
				.collect(Collectors.toList());
		System.out.println(result);
		assertThat(result).containsExactly(10, -10, 30);
	}

	@Test
	public void spliterator() {
		String[] array = new String[] { "Durian", "Guava", "Pitaya" };
		Spliterator<String> sit = Arrays.spliterator(array);
		sit.tryAdvance(e -> System.out.println(e));
		System.out.println("----------");
		sit.forEachRemaining(e -> System.out.println(e));

		System.out.println("----------");
		sit = Arrays.spliterator(array);
		while (sit.tryAdvance(e -> System.out.println(e))) {
		}
	}
}

心得分享

Arrays Class 基本上使用靜態方法對陣列進行操作,提供了幾種 Arrays 常見方法的操作範例,Class Arrays ,實現操作基本型別及物件陣列更簡便的方法。

發佈留言