ฉันมาจาก Python และพยายามทำความเข้าใจว่านิพจน์ lambda ทำงานแตกต่างออกไปใน Java อย่างไร ใน Python คุณสามารถทำสิ่งต่าง ๆ เช่น:
opdict = { "+":lambda a,b: a+b, "-": lambda a,b: a-b,
"*": lambda a,b: a*b, "/": lambda a,b: a/b }
sum = opdict["+"](5,4)
ฉันจะทำสิ่งที่คล้ายกันใน Java ให้สำเร็จได้อย่างไร ฉันได้อ่านมาบ้างแล้วเกี่ยวกับนิพจน์แลมบ์ดาของ Java และดูเหมือนว่าฉันต้องประกาศอินเทอร์เฟซก่อน และฉันก็ไม่ชัดเจนว่าคุณต้องทำเช่นนี้อย่างไรและทำไม
แก้ไข: ฉันพยายามทำสิ่งนี้ด้วยตัวเองด้วยอินเทอร์เฟซที่กำหนดเอง นี่คือรหัสที่ฉันได้ลอง:
Map<String, MathOperation> opMap = new HashMap<String, MathOperation>(){
{ put("+",(a,b)->b+a);
put("-",(a,b)->b-a);
put("*",(a,b)->b*a);
put("/",(a,b)->b/a); }
};
...
...
interface MathOperation {
double operation(double a, double b);
}
อย่างไรก็ตาม สิ่งนี้ทำให้เกิดข้อผิดพลาด:
ประเภทเป้าหมายของนิพจน์นี้ต้องเป็นอินเทอร์เฟซที่ใช้งานได้
ฉันจะประกาศอินเทอร์เฟซได้ที่ไหน