Pemprosesan Array dengan Apache Commons Lang 3

1. Gambaran keseluruhan

Perpustakaan Apache Commons Lang 3 memberikan sokongan untuk manipulasi kelas teras API Java. Sokongan ini merangkumi kaedah untuk menangani rentetan, nombor, tarikh, serentak, pantulan objek dan banyak lagi.

Dalam tutorial ringkas ini, kami akan memfokuskan pada pemprosesan array dengan kelas utiliti ArrayUtils yang sangat berguna .

2. Ketergantungan Maven

Untuk menggunakan perpustakaan Commons Lang 3, tarik sahaja dari repositori pusat Maven menggunakan pergantungan berikut:

 org.apache.commons commons-lang3 3.5 

Anda boleh mendapatkan versi terbaru perpustakaan ini di sini.

3. ArrayUtils

The ArrayUtils kelas menyediakan kaedah utiliti untuk bekerja dengan tatasusunan. Kaedah ini cuba menangani input dengan baik dengan mengelakkan pengecualian dilemparkan ketika nilai nol diteruskan.

Bahagian ini menggambarkan beberapa kaedah yang ditentukan dalam kelas ArrayUtils . Perhatikan bahawa semua kaedah ini boleh berfungsi dengan jenis elemen apa pun.

Untuk kemudahan, rasa mereka yang terlalu banyak juga ditakrifkan untuk menangani susunan yang mengandungi jenis primitif.

4. tambah dan tambahAll

The add kaedah salinan lokasi tertentu dan memasukkan elemen yang diberikan pada kedudukan yang diberikan dalam array baru. Sekiranya kedudukan tidak ditentukan, elemen baru akan ditambahkan pada akhir array.

Fragmen kod berikut memasukkan nombor sifar pada kedudukan pertama array oldArray dan mengesahkan hasilnya:

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

Sekiranya kedudukan tidak ditentukan, elemen tambahan akan ditambahkan pada akhir OldArray :

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

The addAll kaedah menambah semua elemen pada akhir array yang diberikan. Fragmen berikut menggambarkan kaedah ini dan mengesahkan hasilnya:

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. keluarkan dan hapusSemua

Yang mengeluarkan kaedah menyingkirkan elemen pada kedudukan yang ditetapkan dari lokasi yang diberikan. Semua elemen seterusnya dialihkan ke kiri. Perhatikan bahawa ini berlaku untuk semua operasi penyingkiran.

Kaedah ini mengembalikan array baru dan bukannya membuat perubahan pada yang asal:

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

The removeAll kaedah membuang semua unsur-unsur di jawatan-jawatan tertentu dari lokasi diberikan:

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

6. removeElement dan removeElements

The removeElement kaedah membuang kejadian pertama elemen tertentu dari lokasi yang diberikan.

Daripada membuang pengecualian, operasi penghapusan diabaikan jika elemen seperti itu tidak ada dalam larik yang diberikan:

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

The removeElements kaedah membuang kejadian pertama unsur-unsur tertentu daripada lokasi yang diberikan.

Daripada membuang pengecualian, operasi penghapusan diabaikan jika elemen yang ditentukan tidak ada dalam larik yang diberikan:

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

7. API removeAllOccurences

The removeAllOccurences kaedah membuang semua kemunculan unsur tertentu daripada lokasi yang diberikan.

Daripada membuang pengecualian, operasi penghapusan diabaikan jika elemen seperti itu tidak ada dalam larik yang diberikan:

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

8. mengandungi API

Yang mengandungi cek kaedah jika nilai yang wujud dalam pelbagai yang diberikan. Berikut adalah contoh kod, termasuk pengesahan hasilnya:

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. API terbalik

The terbalik kaedah membalikkan perintah unsur dalam julat yang dinyatakan array yang diberikan. Kaedah ini membuat perubahan pada array yang disahkan dan bukannya mengembalikan yang baru.

Mari kita lihat dengan cepat:

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

Sekiranya julat tidak ditentukan, susunan semua elemen dibalikkan:

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

10. The shift API

The shift method shifts a series of elements in a given array a number of positions. This method makes changes to the passed-in array instead of returning a new one.

The following code fragment shifts all elements between the elements at index 1 (inclusive) and index 4 (exclusive) one position to the right and confirms the result:

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

If the range boundaries are not specified, all elements of the array are shifted:

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

11. The subarray API

The subarray method creates a new array containing elements within a specified range of the given array. The following is an example of an assertion of the result:

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

Notice that when the passed-in index is greater than the length of the array, it is demoted to the array length rather than having the method throw an exception. Similarly, if a negative index is passed in, it is promoted to zero.

12. The swap API

The swap method swaps a series of elements at specified positions in the given array.

The following code fragment swaps two groups of elements starting at the indexes 0 and 3, with each group containing two elements:

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

If no length argument is passed in, only one element at each position is swapped:

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

13. Conclusion

This tutorial introduces the core array processing utility in Apache Commons Lang 3 – ArrayUtils.

Seperti biasa, pelaksanaan semua contoh dan potongan kod yang diberikan di atas boleh didapati dalam projek GitHub.