????2014??3?£?Java 8??????Lambda??????????????????????????????????????????????Lambda????????д?????????????磬????????Lambda??????????????????API????????μ????????????????
????int total = invoices.stream().filter(inv -> inv.getMonth() ==
????Month.JULY).mapToInt(Invoice::getAmount).sum();
????????????????????????δ??????м????7?·????????????????????Lambda?????????7?·????????÷????????????????????
?????????????????Java????????JVM?????δ???Lambda?????????????????檔??????????????????Lambda???????????????????????????????????????????????????????????????Lambda??????????????????????????????????м???????????????????????????????????????????汾??
int total = invoices.stream().filter(new Predicate()
{
@Override
public boolean test(Invoice inv) {
return inv.getMonth() == Month.JULY;
}
}).mapToInt(new ToIntFunction()
{
@Override
public int applyAsInt(Invoice inv)
{
return inv.getAmount();
}
}).sum();
?????????????????Java????????в????????????????Lambda????????????Lambda?????????????????????????????????????????????Lambda???????????????????????????????????Lambda??????????????
???????????????????
???????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????? ClassName???????????????????????????????????????????????????????????????????????????????????????????????????????п???????????????????????а????????IO????JAR?????
????????Lambda?????????????????????????Lambda????????????????????????????????????????м????????????JVM?е???????Java 8?????????????????????????????????????JIT???????????????洢?????????С????????????????????????????????????????????????????????????????????????????????б???????μ??????????????????????????ζ????????????????????
?????????????Lambda?????????????????????????????????Lambda????????????????????????JVM????????????????
???????????????????δ???
????import java.util.function.Function;public class AnonymousClassExample
????{
????Function format = new Function()
????{
????public String apply(String input)
????{
????return Character.toUpperCase(input.charAt(0)) + input.substring(1);
????}
????};
????}
????????????????????????κ????????????????
????javap -c -v ClassName
????????????Function???????????????????????????£?
????0: aload_0 1: invokespecial #1 // Method java/lang/Object."":()V4: aload_0 5: new #2 // class AnonymousClassExample$18: dup 9: aload_0 10: invokespecial #3 // Method AnonymousClass$1."":(LAnonymousClassExample;)V13: putfield #4 // Field format:Ljava/util/function/Function;16: return
????????????????????£?
??????5?У????????????new??????????AnonymousClassExample$1??????????????′???????????????????С?
??????8?У????dup???????????????á?
??????10?У??????????????????invokespecial???????????????????????????????
??????13?У??????????????????????????????????putfield????浽AnonymousClassExample???format?????С?
????AnonymousClassExample1??????????????????????Function????????
??????Lambda???????????????????????????????е?????????綹?棩??????????????????????????????????Lambda?????????????????????????????????????Java?????JVM??????????????????????????????????????????????????JVM?????????????????????????????????????Lambda????????ι??????
????Lambdas??????invokedynamic
????????????????????Java?????JVM?????????????????????????????????Java 7?????invokedynamic????????????????Ч??????????????Lambda????????????????????????????
????1.???????invokedynamic??????????Lambda????????????????????Lambda??????????????????????
????2.??Lambda?????????????????????invokedynamic?????á?
??????????????????????????????????????Lambda?????????
????import java.util.function.Function;public class Lambda {    Function f = s -> Integer.parseInt(s);}
????????????????????????????????
????0: aload_01: invokespecial #1 // Method java/lang/Object."":()V4: aload_05: invokedynamic #2?? 0 // InvokeDynamic                  #0:apply:()Ljava/util/function/Function;10: putfield #3 // Field f:Ljava/util/function/Function;13: return
??????????????????????????????е???????javac?????????????????????javac??????????÷?????
????Lambda????????????????????????Lambda?????????????????Lambda?????????????????????????????????????????????????????
????????????б????????Lambda??????????????????????????????????????????????У?????????????Lambda????λ?????????С?????????????Lambda??????????????????????????
????static Integer lambda$1(String s) {    return Integer.parseInt(s);}
???????????????????$1?????????????????????????????????????????
????????????????Lambda????????е???????????Lambda?????????????????????????У??????????????????????????????????????????С???????У???????????????????????????????????????????????С?????????????????
????int offset = 100;Function f = s -> Integer.parseInt(s) + offset;
???????????????????????
????static Integer lambda$1(int offset?? String s) {    return Integer.parseInt(s) + offset;}
??????????????????????Lambda???????????????????????????invokedynamic??????????????????ò?????????????????磬??????????????????????С????Lambda?????????????????????????????????????????????????????????????????????????????????????