Iterasi atas Nilai Enum di Jawa

1. Ikhtisar

Enum di Java adalah tipe data yang membantu kita menetapkan set konstanta yang telah ditentukan ke variabel.

Dalam artikel singkat ini, kita akan melihat berbagai cara untuk melakukan iterasi melalui Enum di Java.

2. Mengulangi Nilai-Nilai Enum

Pertama mari kita definisikan Enum , sehingga kita dapat membuat beberapa contoh kode sederhana:

public enum DaysOfWeekEnum { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY } 

Enum tidak memiliki metode untuk iterasi seperti forEach () atau iterator () . Sebagai gantinya, kita bisa menggunakan larik nilai Enum yang dikembalikan oleh metode values ​​() .

2.1. Iterasi Menggunakan for Loop

Pertama, kita cukup menggunakan sekolah lama for loop:

for (DaysOfWeekEnum day : DaysOfWeekEnum.values()) { System.out.println(day); }

2.2. Iterasi Menggunakan Stream

Kita juga bisa menggunakan java.util.Stream . Sehingga kita bisa melakukan operasi pada nilai Enum .

Untuk membuat Stream kita memiliki dua pilihan, satu menggunakan Stream.of :

Stream.of(DaysOfWeekEnum.values());

Lain, menggunakan Arrays.stream :

Arrays.stream(DaysOfWeekEnum.values());

Jadi, mari kita memperluas kelas DaysOfWeekEnum untuk membuat contoh menggunakan Stream :

public enum DaysOfWeekEnum { SUNDAY("off"), MONDAY("working"), TUESDAY("working"), WEDNESDAY("working"), THURSDAY("working"), FRIDAY("working"), SATURDAY("off"); private String typeOfDay; DaysOfWeekEnum(String typeOfDay) { this.typeOfDay = typeOfDay; } // standard getters and setters public static Stream stream() { return Stream.Of(DaysOfWeekEnum.values()); } }

Sekarang kami akan menulis contoh untuk mencetak hari-hari non-kerja:

public class EnumStreamExample { public static void main() { DaysOfWeekEnum.stream() .filter(d -> d.getTypeOfDay().equals("off")) .forEach(System.out::println); } }

Output yang kita dapatkan saat kita menjalankan ini:

SUNDAY SATURDAY

2.3. Iterasi Menggunakan forEach ()

Metode forEach () telah ditambahkan ke antarmuka Iterable di Java 8. Jadi semua kelas java collection memiliki implementasi metode forEach () . Untuk menggunakan ini dengan Enum, pertama-tama kita perlu mengubah Enum menjadi koleksi yang sesuai. Kita bisa menggunakan Arrays.asList () untuk menghasilkan ArrayList yang kemudian bisa kita putar menggunakan metode forEach () :

Arrays.asList(DaysOfWeekEnum.values()) .forEach(day -> System.out.println(day)); 

2.4. Iterasi Menggunakan EnumSet

EnumSet adalah implementasi set khusus yang bisa kita gunakan dengan tipe Enum :

EnumSet.allOf(DaysOfWeekEnum.class) .forEach(day -> System.out.println(day));

2.5. Menggunakan ArrayList of Enum Values

Kami juga dapat menambahkan nilai Enum ke Daftar . Ini memungkinkan kami untuk memanipulasi List seperti yang lainnya:

List days = new ArrayList(); days.add(DaysOfWeekEnum.FRIDAY); days.add(DaysOfWeekEnum.SATURDAY); days.add(DaysOfWeekEnum.SUNDAY); for (DaysOfWeekEnum day : days) { System.out.println(day); } days.remove(DaysOfWeekEnum.SATURDAY); if (!days.contains(DaysOfWeekEnum.SATURDAY)) { System.out.println("Saturday is no longer in the list"); } for (DaysOfWeekEnum day : days) { System.out.println(day); } 

Kita juga bisa membuat ArrayList dengan menggunakan Arrays.asList () .

Namun, karena ArrayList didukung oleh larik nilai Enum , ArrayList tidak dapat diubah, jadi kami tidak dapat menambah atau menghapus item dari Daftar. Penghapusan dalam kode berikut akan gagal dengan UnsupportedOperationException :

List days = Arrays.asList(DaysOfWeekEnum.values()); days.remove(0); 

3. Kesimpulan

Kami melihat berbagai cara untuk melakukan iterasi melalui Enum menggunakan forEach, Stream , dan for loop di Java. Jika kita perlu melakukan operasi paralel apa pun, Stream adalah pilihan yang bagus.

Jika tidak, tidak ada batasan tentang metode mana yang digunakan.

Seperti biasa, kode untuk semua contoh yang dijelaskan di sini dapat ditemukan di GitHub.