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 class LambdaExpression { 22 //Single inferred-type parameter 23 IntFunction<Integer> f0 = (x) -> x+1; 24 25 //Parentheses optional for single inferred-type parameter 26 IntFunction<Integer> f1 = x -> x+1; 27 28 //Single declared-type parameter, expression body 29 IntFunction<Integer> f2 = (int x) -> x+1; 30 31 //Single declared-type parameter, block body 32 IntFunction<Integer> f3 = (int x) -> { return x+1; }; 33 34 //Multiple declared-type parameters 35 IntBinaryOperator f4 = (int x, int y) -> x+y; 36 37 //Generic argument type 38 static final ToIntBiFunction<String[], List<? extends CharSequence>> 39 selectCommon = (String[] array, 40 List<? extends CharSequence> list) -> 41 { 42 int total = 0; 43 for (int i = 0; i < array.length; i++) { 44 Iterator<? extends CharSequence> iter = list.iterator(); 45 String str = array[i]; 46 while (iter.hasNext()) { 47 CharSequence seq = iter.next(); 48 if (seq.toString().equals(str)) { 49 ++total; 50 iter.remove(); 51 break; 52 } 53 } 54 } 55 return total; 56 }; 57 main(String[] args)58 public static void main(String[] args) { 59 String[] ss = {"a", "b"}; 60 System.out.println(selectCommon.applyAsInt(args, Arrays.asList(ss))); 61 } 62 } 63 64