12
การใช้ Java 8 เป็นตัวเลือกกับ Stream :: flatMap
เฟรมเวิร์ก Java 8 ใหม่และเพื่อน ๆ สร้างขึ้นมาเพื่อโค้ดจาวาที่รัดกุม แต่ฉันได้เจอกับสถานการณ์ที่เรียบง่ายซึ่งดูเหมือนจะยุ่งยาก พิจารณาและวิธีการList<Thing> things Optional<Other> resolve(Thing thing)ผมต้องการที่จะทำแผนที่Thingเพื่อOptional<Other>s Otherและได้รับเป็นครั้งแรก วิธีแก้ปัญหาที่ชัดเจนคือการใช้things.stream().flatMap(this::resolve).findFirst()แต่flatMapต้องการให้คุณส่งกระแสข้อมูลและOptionalไม่มีstream()วิธี (หรือเป็นCollectionหรือให้วิธีการแปลงเป็นหรือดูเป็นCollection) สิ่งที่ดีที่สุดที่ฉันสามารถทำได้คือ: things.stream() .map(this::resolve) .filter(Optional::isPresent) .map(Optional::get) .findFirst(); แต่ดูเหมือนว่าจะยืดยาวไปมากสำหรับสิ่งที่ดูเหมือนว่าเป็นกรณีที่พบบ่อยมาก ใครมีความคิดที่ดีกว่า
240
java
lambda
java-8
java-stream