Pengulangan Nilai Enum di Jawa

1. Gambaran keseluruhan

Enum di Java adalah jenis data yang membantu kita menetapkan sekumpulan pemalar yang telah ditetapkan kepada pemboleh ubah.

Dalam artikel ringkas ini, kita akan melihat berbagai cara untuk mengulangi Enum di Java.

2. Pengulangan Lebih Nilai Enum

Mari kita tentukan Enum terlebih dahulu , supaya kita dapat membuat beberapa contoh kod mudah:

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

Jumlah tidak mempunyai kaedah untuk lelaran seperti forEach () atau iterator () . Sebagai gantinya, kita boleh menggunakan susunan nilai Enum yang dikembalikan oleh kaedah nilai () .

2.1. Gunakan berulang untuk Gelung

Pertama, kita hanya boleh menggunakan sekolah lama untuk gelung:

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

2.2. Melancarkan Aliran

Kita juga boleh menggunakan java.util.Stream . Supaya kita dapat menjalankan operasi pada nilai Enum .

Untuk membuat Stream, kami mempunyai dua pilihan, satu menggunakan Stream.of :

Stream.of(DaysOfWeekEnum.values());

Satu lagi, menggunakan Arrays.stream :

Arrays.stream(DaysOfWeekEnum.values());

Oleh itu, marilah kita memanjangkan 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 kita akan menulis contoh untuk mencetak hari tidak bekerja:

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

Keluaran yang kami dapat ketika menjalankan ini:

SUNDAY SATURDAY

2.3. Mengulangi Menggunakan untuk Setiap ()

Kaedah forEach () telah ditambahkan ke antara muka Iterable di Java 8. Oleh itu, semua kelas pengumpulan java mempunyai pelaksanaan kaedah forEach () . Untuk menggunakannya dengan Enum, pertama kita perlu menukar Enum menjadi koleksi yang sesuai. Kita boleh menggunakan Arrays.asList () untuk menghasilkan ArrayList yang kemudiannya kita dapat menggunakan kaedah forEach () :

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

2.4. Mengulangi Menggunakan EnumSet

EnumSet adalah implementasi set khusus yang dapat kita gunakan dengan jenis Enum :

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

2.5. Menggunakan ArrayList of Enum Nilai

Kita juga boleh menambah nilai Enum ke Senarai . Ini membolehkan kita memanipulasi Senarai seperti yang lain:

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 boleh membuat ArrayList dengan menggunakan Arrays.asList () .

Namun, kerana ArrayList disokong oleh array nilai Enum, ia tidak akan berubah, jadi kami tidak dapat menambahkan atau membuang item dari Daftar. Penghapusan dalam kod berikut akan gagal dengan UnsupportedOperationException :

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

3. Kesimpulannya

Kami melihat pelbagai cara untuk melakukan iterasi melalui Enum menggunakan forEach, Stream , dan untuk loop di Java. Sekiranya kita perlu melakukan operasi selari, Stream akan menjadi pilihan yang baik.

Jika tidak, tidak ada batasan kaedah mana yang akan digunakan.

Seperti biasa, kod untuk semua contoh yang dijelaskan di sini boleh didapati di GitHub.