Java 8 akışlarıyla çalışıyorum ve bunları hata ayıklamak için bir yol bulmak istiyorum. Yani böyle bir akışın bir aşamada unsurları basılmış filtre, bir şeyler yazmak diye düşündüm:İzleme Akışları
int[] nums = {3, -4, 8, 4, -2, 17, 9, -10, 14, 6, -12};
int sum = Arrays.stream(nums)
.filter(w -> {System.out.print(" " + w); return true;}) // trace
.map(n -> Math.abs(n))
.filter(w -> {System.out.print(" " + w); return true;}) // trace
.filter(n -> n % 2 == 0)
.distinct()
.sum();
System.out.println(sum);
Kapat ama yapmak doğru sınırlayıcılar olmadığı için bu, oldukça değil o okunaklı:
3 3 -4 4 8 8 4 4 -2 2 17 17 9 9 -10 10 14 14 6 6 -12 1256
istediğim geçerli:
[3, -4, 8, 4, -2, 17, 9, -10, 14, 6, -12]
[3 4 8 4 2 17 9 10 14 6 12]
56
bunu yapmanın bir daha standart bir yolu var mı? Bağlantılı makalenin dediği gibi Peek'in bunu yapmadığına dikkat edin, çünkü bir şekilde akışın tüm unsurlarını birlikte her aşamada toplamak istiyorum.
'Peek' işlemini arıyoruz, bağlantılı soruyu kontrol edin. – Tunaki
Peek işi yapmazdı. Soruma daha fazla ayrıntı ekledim. Bu bir def değil! – pitosalas
Ah evet. Ancak bu nasıl işlemez: Akış tek bir boru hattıdır. Her eleman, tüketilene kadar baştan sona geçer. Ve bir sonraki için tekrarlayın. İstediğinizi elde etmek için birden fazla boru hattına sahip olmanız gerekir. Bir toplama çağrısı tüm akışı tüketir ve tekrar işleyemezsiniz. – Tunaki