ฉันต้องการรวมรายการจำนวนเต็ม มันใช้งานได้ดังต่อไปนี้ แต่ไวยากรณ์ไม่ถูกต้อง รหัสสามารถปรับให้เหมาะสมหรือไม่
Map<String, Integer> integers;
integers.values().stream().mapToInt(i -> i).sum();
i -> iชัดเจนมากส่วนตัว ใช่คุณจำเป็นต้องรู้ว่าค่าจะถูกยกเลิกโดยอัตโนมัติ แต่มันเป็นเรื่องจริงตั้งแต่ Java 5 ...
foo(int i)อย่าเขียนfoo(myInteger.intValue());ทุกครั้งที่เรียกว่า (หรืออย่างน้อยฉันก็คาดหวังว่าจะไม่ !!) ฉันเห็นด้วยกับคุณที่Integer::intValueชัดเจนกว่า แต่ฉันคิดว่าเหมือนกันกับที่นี่ ผู้คนควรเรียนรู้เพียงครั้งเดียวจากนั้นคุณก็ทำเสร็จ :-) มันไม่เหมือนกับว่ามันเป็นการทำให้งงงวยมายากล
i -> iดูเหมือนว่าไม่มี op และความคิดมันเป็น no-op แน่นอนว่าภายใต้ประทุนInteger.intValue()ได้รับการเรียกใช้ แต่ยิ่งลึกลงไปใต้ฝากระโปรงวิธีการดังกล่าวจะกลายเป็นแบบไม่มีการใช้งานเหมือนที่ปรากฏในซอร์สโค้ด Integer::intValueมีจุดโบนัสที่ไม่ได้สร้างวิธีการสังเคราะห์ในรหัสไบต์ แต่ไม่ใช่สิ่งที่ควรผลักดันการตัดสินใจของคุณในการจัดระเบียบซอร์สโค้ดของคุณ
mapToLongเพื่อหลีกเลี่ยงการล้นเกินขึ้นอยู่กับค่าแผนที่ของคุณ