1 import java.lang.annotation.Target; 2 import java.lang.annotation.ElementType; 3 import java.util.ArrayList; 4 import java.util.Arrays; 5 import java.util.Iterator; 6 import java.util.List; 7 import java.util.function.Consumer; 8 import java.util.function.Function; 9 import java.util.function.IntBinaryOperator; 10 import java.util.function.IntFunction; 11 import java.util.function.Predicate; 12 import java.util.function.Supplier; 13 import java.util.function.ToIntBiFunction; 14 15 @Target(ElementType.TYPE_USE) @interface A {} 16 17 @Target(ElementType.TYPE_USE) @interface B {} 18 19 @Target(ElementType.TYPE_USE) @interface C {} 20 21 @skip-test 22 class LambdaExpression { 23 //Single inferred-type parameter 24 IntFunction<Integer> f0 = (x) -> x+1; 25 26 //Parentheses optional for single inferred-type parameter 27 IntFunction<Integer> f1 = x -> x+1; 28 29 //Single declared-type parameter, expression body 30 IntFunction<Integer> f2 = (@A int x) -> x+1; 31 32 //Single declared-type parameter, block body 33 IntFunction<Integer> f3 = (@A int x) -> { return x+1; }; 34 35 //Multiple declared-type parameters 36 IntBinaryOperator f4 = (@A int x, @B int y) -> x+y; 37 38 //Generic argument type 39 static final ToIntBiFunction<String[], List<? extends CharSequence>> 40 selectCommon = (@A String @B [] array, 41 @A List<@B ? extends @C CharSequence> list) -> 42 { 43 int total = 0; 44 for (int i = 0; i < array.length; i++) { 45 Iterator<? extends CharSequence> iter = list.iterator(); 46 String str = array[i]; 47 while (iter.hasNext()) { 48 CharSequence seq = iter.next(); 49 if (seq.toString().equals(str)) { 50 ++total; 51 iter.remove(); 52 break; 53 } 54 } 55 } 56 return total; 57 }; 58 59 public static void main(String[] args) { 60 String[] ss = {"a", "b"}; 61 System.out.println(selectCommon.applyAsInt(args, Arrays.asList(ss))); 62 } 63 } 64 65