Saya ingin menjumlahkan daftar bilangan bulat. Ini berfungsi sebagai berikut, tetapi sintaksnya terasa tidak benar. Bisakah kode dioptimalkan?
Map<String, Integer> integers;
integers.values().stream().mapToInt(i -> i).sum();
i -> i
sangat jelas, secara pribadi. Ya, Anda perlu tahu bahwa nilainya akan secara otomatis terbuka, tapi itu benar sejak Java 5 ...
foo(int i)
tidak menulis foo(myInteger.intValue());
setiap kali mereka menyebutnya (atau setidaknya saya harapkan tidak !!). Saya setuju dengan Anda yang Integer::intValue
lebih eksplisit tetapi saya pikir hal yang sama berlaku di sini. Orang-orang harus mempelajarinya sekali saja dan kemudian selesai :-). Ini tidak seperti jika itu suatu kebingungan ajaib.
i -> i
sepertinya tidak ada op dan secara konsep, itu adalah no-op. Tentu saja, di bawah tenda Integer.intValue()
dipanggil, tetapi bahkan lebih dalam di bawah tenda, metode-metode tersebut diuraikan menjadi persis no-op yang terlihat seperti dalam kode sumber. Integer::intValue
memiliki poin bonus tidak membuat metode sintetik dalam kode byte tetapi bukan itu yang harus mengarahkan keputusan Anda tentang bagaimana mengatur kode sumber Anda.
mapToLong
untuk menghindari luapan, tergantung pada nilai yang bisa dimiliki peta Anda.