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 -> isangat 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::intValuelebih 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 -> isepertinya 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::intValuememiliki poin bonus tidak membuat metode sintetik dalam kode byte tetapi bukan itu yang harus mengarahkan keputusan Anda tentang bagaimana mengatur kode sumber Anda.
mapToLonguntuk menghindari luapan, tergantung pada nilai yang bisa dimiliki peta Anda.