Saya punya enum
di Java untuk arah mata angin & menengah:
public enum Direction {
NORTH,
NORTHEAST,
EAST,
SOUTHEAST,
SOUTH,
SOUTHWEST,
WEST,
NORTHWEST
}
Bagaimana saya bisa menulis
for
loop yang berulang melalui masing-masingenum
nilai - nilai ini ?
Jawaban:
.values()
Anda dapat memanggil
values()
metode pada enum Anda.Ini
values()
metode ini secara implisit dinyatakan oleh compiler . Jadi tidak terdaftar diEnum
doc.sumber
Semua konstanta dari tipe enum dapat diperoleh dengan memanggil
public static T[] values()
metode implisit dari tipe itu:sumber
#
dilakukan?Enum#values()
=Enum.values()
.
(selalu?)?Anda dapat melakukan ini sebagai berikut:
sumber
Arrays.stream(Enum.values()).forEach(...)
- alirannya akan berurutanset
bukanarray
. Ini bukan "lebih baik", meskipun itu menggambarkan nilai enum lebih baik menurut saya, karena dari definisi set, nilai-nilai dalam set tidak dapat diulangi (seperti dalam enum), sedangkan nilai-nilai dalam array dapat.Streaming
Sebelum ke Jawa 8
Java 8
Kami juga dapat menggunakan lambda dan stream ( Tutorial ):
Kenapa
forEachOrdered
dan tidakforEach
dengan stream?Perilaku
forEach
eksplisit nondeterministik di mana sebagaiforEachOrdered
melakukan tindakan untuk setiap elemen aliran ini, dalam urutan pertemuan aliran jika aliran memiliki urutan pertemuan yang ditentukan. JadiforEach
tidak menjamin bahwa pesanan akan disimpan.Juga ketika bekerja dengan stream (terutama yang paralel) perlu diingat sifat stream. Sesuai dokumen :
Hasil aliran pipa mungkin tidak deterministik atau salah jika parameter perilaku ke operasi aliran stateful. Lambda stateful adalah salah satu yang hasilnya tergantung pada negara yang mungkin berubah selama pelaksanaan pipa aliran.
Di sini, jika operasi pemetaan dilakukan secara paralel, hasil untuk input yang sama dapat bervariasi dari satu menjalankan ke menjalankan, karena perbedaan penjadwalan thread, sedangkan, dengan ekspresi lambda stateless, hasilnya akan selalu sama.
Efek samping dalam parameter perilaku untuk mengalirkan operasi, secara umum, tidak disarankan, karena seringkali dapat menyebabkan pelanggaran tanpa disadari terhadap persyaratan kewarganegaraan, serta bahaya keselamatan benang lainnya.
Streaming mungkin atau mungkin tidak memiliki urutan pertemuan yang ditentukan. Apakah aliran memiliki urutan pertemuan atau tidak tergantung pada sumber dan operasi perantara.
sumber
sumber
Jika Anda tidak peduli dengan pesanan ini, ini akan berfungsi:
sumber
EnumSet
: Iterator yang dikembalikan oleh metode iterator melintasi elemen dalam tatanan alami mereka (urutan di mana konstanta enum dinyatakan) . Ini menjamin bahwa urutan iterasi cocok dengan pesanan yang dikembalikan olehEnum.values()
.sumber
Java8
dari Java5 +
sumber
Cobalah untuk menggunakan masing-masing
sumber
Lebih banyak metode di java 8:
Menggunakan
EnumSet
denganforEach
Menggunakan
Arrays.asList
denganforEach
sumber