Canlı Yayınlar
Java 8'den önce
for (Direction dir : Direction.values()) {
System.out.println(dir);
}
Java 8
Ayrıca lambda ve akarsudan da faydalanabiliriz ( Eğitim ):
Stream.of(Direction.values()).forEachOrdered(System.out::println);
Neden forEachOrderedve forEachakarsu ile değil ?
Öğesinin davranışı forEachaçıkça belirsizdir; burada forEachOrderedakış, tanımlı bir karşılaşma sırasına sahipse akışın karşılaşma sırasında bu akışın her öğesi için bir eylem gerçekleştirir. Bu yüzden forEachsiparişin korunacağını garanti etmez.
Ayrıca akışlarla (özellikle paralel olanlar) çalışırken, akışların doğasını unutmayın. Gereğince doc :
Akış işlemlerine ilişkin davranışsal parametreler durumluysa akış boru hattı sonuçları belirsiz veya yanlış olabilir. Durum bilgisi olan bir lambda, sonucu akış boru hattının yürütülmesi sırasında değişebilecek herhangi bir duruma bağlı olan bir lambdadır.
Set<Integer> seen = Collections.synchronizedSet(new HashSet<>());
stream.parallel().map(e -> { if (seen.add(e)) return 0; else return e; })...
Burada, eşleme işlemi paralel olarak gerçekleştirilirse, aynı girdi için sonuçlar iplik zamanlama farklılıkları nedeniyle çalışmadan çalışmaya değişebilir, oysa durumsuz bir lambda ifadesi ile sonuçlar her zaman aynı olur.
Akış işlemlerine yönelik davranışsal parametrelerdeki yan etkiler, genellikle vatansızlık gereksiniminin yanı sıra diğer iplik güvenliği tehlikelerinin farkında olmadan ihlal edilmesine yol açabileceğinden, genellikle önerilmez.
Akışlar tanımlı bir karşılaşma sırasına sahip olabilir veya olmayabilir. Bir akışın karşılaşma sırasına sahip olup olmadığı kaynağa ve ara işlemlere bağlıdır.