import java.lang.annotation.Target; import java.lang.annotation.ElementType; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.IntBinaryOperator; import java.util.function.IntFunction; import java.util.function.Predicate; import java.util.function.Supplier; import java.util.function.ToIntBiFunction; @Target(ElementType.TYPE_USE) @interface A {} @Target(ElementType.TYPE_USE) @interface B {} @Target(ElementType.TYPE_USE) @interface C {} class LambdaExpression { //Single inferred-type parameter IntFunction f0 = (x) -> x+1; //Parentheses optional for single inferred-type parameter IntFunction f1 = x -> x+1; //Single declared-type parameter, expression body IntFunction f2 = (int x) -> x+1; //Single declared-type parameter, block body IntFunction f3 = (int x) -> { return x+1; }; //Multiple declared-type parameters IntBinaryOperator f4 = (int x, int y) -> x+y; //Generic argument type static final ToIntBiFunction> selectCommon = (String[] array, List list) -> { int total = 0; for (int i = 0; i < array.length; i++) { Iterator iter = list.iterator(); String str = array[i]; while (iter.hasNext()) { CharSequence seq = iter.next(); if (seq.toString().equals(str)) { ++total; iter.remove(); break; } } } return total; }; public static void main(String[] args) { String[] ss = {"a", "b"}; System.out.println(selectCommon.applyAsInt(args, Arrays.asList(ss))); } }