Table of Contents
ToggleArrays 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 ,實現操作基本型別及物件陣列更簡便的方法。