Tamsayıların bir listesini toplamak istiyorum. Aşağıdaki gibi çalışır, ancak sözdizimi doğru hissetmez. Kod optimize edilebilir mi?
Map<String, Integer> integers;
integers.values().stream().mapToInt(i -> i).sum();
i -> i
çok net buluyorum . Evet, değerin otomatik olarak kutudan çıkarılacağını bilmeniz gerekiyor, ancak Java 5'ten beri doğru ...
foo(int i)
bunu foo(myInteger.intValue());
her çağırdıklarında yazmazlar (ya da en azından beklemiyorum !!). Sana katılıyorum, bu Integer::intValue
daha açık ama aynı şey burada da geçerli. İnsanlar sadece bir kez öğrenmeli ve sonra bitirdiniz :-). Biraz sihirli bir şaşkınlık gibi değil.
i -> i
no-op ve conceptionally gibi görünüyor, bu ise no-op. Elbette, başlık altında Integer.intValue()
denir, ancak başlık altında daha da derin, bu yöntemler tam olarak kaynak kodunda göründüğü no-op haline gelir. Integer::intValue
, bayt kodunda sentetik bir yöntem oluşturmamanın bonus noktasına sahiptir, ancak kaynak kodunuzu nasıl düzenleyeceğinize karar vermenizi gerektirmez.
mapToLong
Haritanızın sahip olabileceği değerlere bağlı olarak taşmaları önlemek için kullanmak isteyebilirsiniz .