????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????娴紸nonymousClassExample???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?????????????????????????????????????????????????????????????????????????????????????