ฉันต้องการรวมรายการจำนวนเต็ม มันใช้งานได้ดังต่อไปนี้ แต่ไวยากรณ์ไม่ถูกต้อง รหัสสามารถปรับให้เหมาะสมหรือไม่
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
เพื่อหลีกเลี่ยงการล้นเกินขึ้นอยู่กับค่าแผนที่ของคุณ