Apache Commons Lang 3を使った配列処理

Apache Commons Lang 3を使用した配列処理

1. 概要

Apache Commons Lang 3ライブラリは、JavaAPIのコアクラスの操作をサポートします。 このサポートには、文字列、数値、日付、同時実行、オブジェクトの反映などを処理するためのメソッドが含まれます。

このクイックチュートリアルでは、非常に便利なArrayUtilsユーティリティクラスを使用した配列処理に焦点を当てます。

2. メーベン依存

Commons Lang 3ライブラリを使用するには、次の依存関係を使用して中央のMavenリポジトリからそれをプルするだけです。


    org.apache.commons
    commons-lang3
    3.5

このライブラリの最新バージョンhereを見つけることができます。

3. ArrayUtils

ArrayUtilsクラスは、配列を操作するためのユーティリティメソッドを提供します。 これらのメソッドは、null値が渡されたときに例外がスローされないようにすることで、入力を適切に処理しようとします。

このセクションでは、ArrayUtilsクラスで定義されているいくつかのメソッドについて説明します。 これらのメソッドはすべて、どの要素タイプでも機能することに注意してください。

便宜上、オーバーロードされたフレーバーは、プリミティブ型を含む配列を処理するためにも定義されています。

4. addおよびaddAll

addメソッドは、指定された配列をコピーし、指定された要素を新しい配列の指定された位置に挿入します。 位置が指定されていない場合、新しい要素は配列の最後に追加されます。

次のコードフラグメントは、oldArray配列の最初の位置に数値ゼロを挿入し、結果を検証します。

int[] oldArray = { 2, 3, 4, 5 };
int[] newArray = ArrayUtils.add(oldArray, 0, 1);
int[] expectedArray = { 1, 2, 3, 4, 5 };

assertArrayEquals(expectedArray, newArray);

位置が指定されていない場合、追加の要素がoldArrayの最後に追加されます。

int[] oldArray = { 2, 3, 4, 5 };
int[] newArray = ArrayUtils.add(oldArray, 1);
int[] expectedArray = { 2, 3, 4, 5, 1 };

assertArrayEquals(expectedArray, newArray);

addAllメソッドは、指定された配列の最後にすべての要素を追加します。 次のフラグメントはこの方法を示し、結果を確認します。

int[] oldArray = { 0, 1, 2 };
int[] newArray = ArrayUtils.addAll(oldArray, 3, 4, 5);
int[] expectedArray = { 0, 1, 2, 3, 4, 5 };

assertArrayEquals(expectedArray, newArray);

5. removeおよびremoveAll

removeメソッドは、指定された配列から指定された位置にある要素を削除します。 後続の要素はすべて左にシフトされます。 これはすべての削除操作に当てはまることに注意してください。

このメソッドは、元の配列に変更を加える代わりに、新しい配列を返します。

int[] oldArray = { 1, 2, 3, 4, 5 };
int[] newArray = ArrayUtils.remove(oldArray, 1);
int[] expectedArray = { 1, 3, 4, 5 };

assertArrayEquals(expectedArray, newArray);

removeAllメソッドは、指定された配列から指定された位置にあるすべての要素を削除します。

int[] oldArray = { 1, 2, 3, 4, 5 };
int[] newArray = ArrayUtils.removeAll(oldArray, 1, 3);
int[] expectedArray = { 1, 3, 5 };

assertArrayEquals(expectedArray, newArray);

6. removeElementおよびremoveElements

removeElementメソッドは、指定された配列から指定された要素の最初の出現を削除します。

そのような要素が特定の配列に存在しない場合、例外をスローする代わりに、削除操作は無視されます。

int[] oldArray = { 1, 2, 3, 3, 4 };
int[] newArray = ArrayUtils.removeElement(oldArray, 3);
int[] expectedArray = { 1, 2, 3, 4 };

assertArrayEquals(expectedArray, newArray);

removeElementsメソッドは、指定された配列から指定された要素の最初の出現を削除します。

指定された要素が指定された配列に存在しない場合、例外をスローする代わりに、削除操作は無視されます。

int[] oldArray = { 1, 2, 3, 3, 4 };
int[] newArray = ArrayUtils.removeElements(oldArray, 2, 3, 5);
int[] expectedArray = { 1, 3, 4 };

assertArrayEquals(expectedArray, newArray);

7. removeAllOccurences API

removeAllOccurencesメソッドは、指定された配列から指定された要素のすべてのオカレンスを削除します。

そのような要素が特定の配列に存在しない場合、例外をスローする代わりに、削除操作は無視されます。

int[] oldArray = { 1, 2, 2, 2, 3 };
int[] newArray = ArrayUtils.removeAllOccurences(oldArray, 2);
int[] expectedArray = { 1, 3 };

assertArrayEquals(expectedArray, newArray);

8. contains API

containsメソッドは、指定された配列に値が存在するかどうかを確認します。 以下は、結果の検証を含むコード例です。

int[] array = { 1, 3, 5, 7, 9 };
boolean evenContained = ArrayUtils.contains(array, 2);
boolean oddContained = ArrayUtils.contains(array, 7);

assertEquals(false, evenContained);
assertEquals(true, oddContained);

9. reverse API

reverseメソッドは、指定された配列の指定された範囲内で要素の順序を逆にします。 このメソッドは、新しい配列を返す代わりに、渡された配列を変更します。

簡単に見てみましょう:

int[] originalArray = { 1, 2, 3, 4, 5 };
ArrayUtils.reverse(originalArray, 1, 4);
int[] expectedArray = { 1, 4, 3, 2, 5 };

assertArrayEquals(expectedArray, originalArray);

範囲が指定されていない場合、すべての要素の順序が逆になります。

int[] originalArray = { 1, 2, 3, 4, 5 };
ArrayUtils.reverse(originalArray);
int[] expectedArray = { 5, 4, 3, 2, 1 };

assertArrayEquals(expectedArray, originalArray);

10. shift API

shiftメソッドは、指定された配列内の一連の要素をいくつかの位置にシフトします。 このメソッドは、新しい配列を返す代わりに、渡された配列を変更します。

次のコードフラグメントは、インデックス1(包括的)とインデックス4(排他的)の要素の間のすべての要素を1つ右にシフトし、結果を確認します。

int[] originalArray = { 1, 2, 3, 4, 5 };
ArrayUtils.shift(originalArray, 1, 4, 1);
int[] expectedArray = { 1, 4, 2, 3, 5 };

assertArrayEquals(expectedArray, originalArray);

範囲の境界が指定されていない場合、配列のすべての要素がシフトされます。

int[] originalArray = { 1, 2, 3, 4, 5 };
ArrayUtils.shift(originalArray, 1);
int[] expectedArray = { 5, 1, 2, 3, 4 };

assertArrayEquals(expectedArray, originalArray);

11. subarray API

subarrayメソッドは、指定された配列の指定された範囲内の要素を含む新しい配列を作成します。 以下は、結果のアサーションの例です。

int[] oldArray = { 1, 2, 3, 4, 5 };
int[] newArray = ArrayUtils.subarray(oldArray, 2, 7);
int[] expectedArray = { 3, 4, 5 };

assertArrayEquals(expectedArray, newArray);

渡されたインデックスが配列の長さより大きい場合、メソッドに例外をスローさせるのではなく、配列の長さに降格されることに注意してください。 同様に、負のインデックスが渡されると、ゼロに昇格します。

12. swap API

swapメソッドは、指定された配列の指定された位置にある一連の要素を交換します。

次のコードは、インデックス0および3から始まる2つの要素グループを交換します。各グループには2つの要素が含まれています。

int[] originalArray = { 1, 2, 3, 4, 5 };
ArrayUtils.swap(originalArray, 0, 3, 2);
int[] expectedArray = { 4, 5, 3, 1, 2 };

assertArrayEquals(expectedArray, originalArray);

長さ引数が渡されない場合、各位置で1つの要素のみが交換されます。

int[] originalArray = { 1, 2, 3, 4, 5 };
ArrayUtils.swap(originalArray, 0, 3);
int[] expectedArray = { 4, 2, 3, 1, 5 };
assertArrayEquals(expectedArray, originalArray);

13. 結論

このチュートリアルでは、Apache Commons Lang 3 –ArrayUtilsのコア配列処理ユーティリティを紹介します。

いつものように、上記のすべての例とコードスニペットの実装はthe GitHub projectにあります。