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 forEachOrdered
ve forEach
akarsu ile değil ?
Öğesinin davranışı forEach
açıkça belirsizdir; burada forEachOrdered
akış, 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 forEach
sipariş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.