blob: 384cca6f4ae8761188bce6d13064015ded74a6da [file] [log] [blame]
// see also the test for Issue450
// Test file for lambda syntax
interface Supplier<R> {
R supply();
}
interface Function<T, R> {
R apply(T t);
}
interface Consumer<T> {
void consume(T t);
}
interface BiFunction<T, U, R> {
R apply(T t, U u);
}
interface Noop {
void noop();
}
public class Lambda {
public static void consumeStr(String str) {}
Lambda(Consumer<String> consumer) {
consumer.consume("hello");
}
// No parameters; result is void
Noop f1 = () -> {};
// No parameters, expression body
Supplier<Integer> f2 = () -> 42;
// No parameters, expression body
// Supplier<Void> f3 = () -> null;
// No parameters, block body with return
Supplier<Integer> f4 =
() -> {
return 42;
};
Noop f5 =
() -> {
System.gc();
}; // No parameters, void block body
// Complex block body with returns
Supplier<Integer> f6 =
() -> {
if (true) {
return 12;
} else {
int result = 15;
for (int i = 1; i < 10; i++) {
result *= i;
}
// conditional expression
Consumer<String> consumer = result > 100 ? Lambda::consumeStr : Lambda::consumeStr;
return result;
}
};
// Single declared-type parameter
Function<Integer, Integer> f7 = (Integer x) -> x + 1;
// Single declared-type parameter
Function<Integer, Integer> f9 =
(Integer x) -> {
return (Integer) x + 1;
};
// Single inferred-type parameter
Function<Integer, Integer> f10 = (x) -> x + 1;
// Parentheses optional for single inferred-type parameter
Function<Integer, Integer> f11 = x -> x + 1;
// Single declared-type parameter
Function<String, Integer> f12 = (String s) -> s.length();
// Single declared-type parameter
Consumer<Thread> f13 =
(Thread t) -> {
t.start();
};
// Single inferred-type parameter
Consumer<String> f14 = s -> s.length();
// Single inferred-type parameter
Consumer<Thread> f15 =
t -> {
t.start();
};
// Multiple declared-type parameters
BiFunction<Integer, Integer, Integer> f16 = (Integer x, final Integer y) -> x + y;
// Multiple inferred-type parameters
BiFunction<String, String, String> f18 = (x, y) -> x + y;
}