// java 8 lambdas
class Main{
// Interfaces that are used for lambdas may only contain a single method.
interface A{
void a(); // No argument nor return
}
static A a
= ()->{System.
out.
println("A A");};
interface B{
void b
(String s
); // String argument, no return }
static B b
= s
->{System.
out.
println(s
);};
interface C{
String c
(); // No argument, String return }
static C c = ()->"C C"; // short for ()->{return "C C";};
interface D{
String d
(String s
); // String for both the argument and return }
static D d = s->s+" D"; // short for s->{return s+" D";};
// Runnable takes no argument and has no return
// Consumer takes arguments, but has no return
static java.
util.
function.
Consumer<String
> f
= s
->{System.
out.
println(s
);}; // Supplier takes no arguments, but has a return
static java.util.function.Supplier<String> g = ()->"G G"; // short for ()->{return "G G";};
// Function takes arguments, and has a return
static java.
util.
function.
Function<String, String
> h
= s
->s
+" H"; // short for s->{return s+" H";};
interface X{
}
static X x = (a,b)->a+" "+b; // short for (a,b)->{return a+" "+b;};
// It is also possible to chain lambda's. This is called currying, and is useful for codegolfing,
// because a->b->{...} is 1 byte shorter than (a,b)->{...}
static java.
util.
function.
Function<String, java.
util.
function.
Function<String, String
>> y
= a
->b
->a
+" "+b
; // short for a->b->{return a+" "+b;}; // NOTE:
// - With no arguments currying-lambdas and interface-lambdas are of equal length: ()->{...} vs ()->{...}
// - With 1 argument currying-lambdas and interface-lambdas are of equal length: a->{...} vs a->{...}
// - With 2 arguments currying-lambdas are 1 byte shorter than interface-lambdas: a->b->{...} vs (a,b)->{...}
// - With 3 arguments currying-lambdas and interface-lambdas are of equal length: a->b->c->{...} vs (a,b,c)->{...}
// - With 4 or more arguments currying-lambdas are longer than interface-lambdas: a->b->c->d->{...} vs (a,b,c,d)->{...}
// Using a Void null argument is also useful for code-golfing, because v->{...} is 1 byte shorter than ()->{...}
interface Z{
}
static Z z = v->"Z Z"; // short for v->{return "Z Z";};
public static void main
(String[] args
){ a.a();
b.b("B B");
e.run(); // Runnable has the run() method to execute the lambda
f.accept("F F"); // Consumer has the accept(...) method to execute the lambda
System.
out.
println(g.
get()); // Supplier has the get() method to execute the lambda System.
out.
println(h.
apply("H")); // Function has the apply(...) method to execute the lambda System.
out.
println(x.
x("X",
"X")); System.
out.
println(y.
apply("Y").
apply("Y")); System.
out.
println(z.
z(null)); }
}
Ly8gamF2YSA4IGxhbWJkYXMKY2xhc3MgTWFpbnsKICAvLyBJbnRlcmZhY2VzIHRoYXQgYXJlIHVzZWQgZm9yIGxhbWJkYXMgbWF5IG9ubHkgY29udGFpbiBhIHNpbmdsZSBtZXRob2QuCgogIGludGVyZmFjZSBBewogICAgdm9pZCBhKCk7IC8vIE5vIGFyZ3VtZW50IG5vciByZXR1cm4KICB9CiAgc3RhdGljIEEgYSA9ICgpLT57U3lzdGVtLm91dC5wcmludGxuKCJBIEEiKTt9OwoKICBpbnRlcmZhY2UgQnsKICAgIHZvaWQgYihTdHJpbmcgcyk7IC8vIFN0cmluZyBhcmd1bWVudCwgbm8gcmV0dXJuCiAgfQogIHN0YXRpYyBCIGIgPSBzLT57U3lzdGVtLm91dC5wcmludGxuKHMpO307CgogIGludGVyZmFjZSBDewogICAgU3RyaW5nIGMoKTsgLy8gTm8gYXJndW1lbnQsIFN0cmluZyByZXR1cm4KICB9CiAgc3RhdGljIEMgYyA9ICgpLT4iQyBDIjsgLy8gc2hvcnQgZm9yICgpLT57cmV0dXJuICJDIEMiO307CgogIGludGVyZmFjZSBEewogICAgU3RyaW5nIGQoU3RyaW5nIHMpOyAvLyBTdHJpbmcgZm9yIGJvdGggdGhlIGFyZ3VtZW50IGFuZCByZXR1cm4KICB9CiAgc3RhdGljIEQgZCA9IHMtPnMrIiBEIjsgLy8gc2hvcnQgZm9yIHMtPntyZXR1cm4gcysiIEQiO307CgogIC8vIFJ1bm5hYmxlIHRha2VzIG5vIGFyZ3VtZW50IGFuZCBoYXMgbm8gcmV0dXJuCiAgc3RhdGljIGphdmEubGFuZy5SdW5uYWJsZSBlID0gKCktPntTeXN0ZW0ub3V0LnByaW50bG4oIkUgRSIpO307CiAgLy8gQ29uc3VtZXIgdGFrZXMgYXJndW1lbnRzLCBidXQgaGFzIG5vIHJldHVybgogIHN0YXRpYyBqYXZhLnV0aWwuZnVuY3Rpb24uQ29uc3VtZXI8U3RyaW5nPiBmID0gcy0+e1N5c3RlbS5vdXQucHJpbnRsbihzKTt9OwogIC8vIFN1cHBsaWVyIHRha2VzIG5vIGFyZ3VtZW50cywgYnV0IGhhcyBhIHJldHVybgogIHN0YXRpYyBqYXZhLnV0aWwuZnVuY3Rpb24uU3VwcGxpZXI8U3RyaW5nPiBnID0gKCktPiJHIEciOyAvLyBzaG9ydCBmb3IgKCktPntyZXR1cm4gIkcgRyI7fTsKICAvLyBGdW5jdGlvbiB0YWtlcyBhcmd1bWVudHMsIGFuZCBoYXMgYSByZXR1cm4KICBzdGF0aWMgamF2YS51dGlsLmZ1bmN0aW9uLkZ1bmN0aW9uPFN0cmluZywgU3RyaW5nPiBoID0gcy0+cysiIEgiOyAvLyBzaG9ydCBmb3Igcy0+e3JldHVybiBzKyIgSCI7fTsKCiAgaW50ZXJmYWNlIFh7CiAgICBTdHJpbmcgeChTdHJpbmcgYSwgU3RyaW5nIGIpOyAvLyBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGhhdmUgbXVsdGlwbGUgYXJndW1lbnRzCiAgfQogIHN0YXRpYyBYIHggPSAoYSxiKS0+YSsiICIrYjsgLy8gc2hvcnQgZm9yIChhLGIpLT57cmV0dXJuIGErIiAiK2I7fTsKCiAgLy8gSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjaGFpbiBsYW1iZGEncy4gVGhpcyBpcyBjYWxsZWQgY3VycnlpbmcsIGFuZCBpcyB1c2VmdWwgZm9yIGNvZGVnb2xmaW5nLAogIC8vIGJlY2F1c2UgYS0+Yi0+ey4uLn0gaXMgMSBieXRlIHNob3J0ZXIgdGhhbiAoYSxiKS0+ey4uLn0KICBzdGF0aWMgamF2YS51dGlsLmZ1bmN0aW9uLkZ1bmN0aW9uPFN0cmluZywgamF2YS51dGlsLmZ1bmN0aW9uLkZ1bmN0aW9uPFN0cmluZywgU3RyaW5nPj4geSA9IGEtPmItPmErIiAiK2I7IC8vIHNob3J0IGZvciBhLT5iLT57cmV0dXJuIGErIiAiK2I7fTsKICAvLyBOT1RFOgogIC8vICAtIFdpdGggbm8gYXJndW1lbnRzIGN1cnJ5aW5nLWxhbWJkYXMgYW5kIGludGVyZmFjZS1sYW1iZGFzIGFyZSBvZiBlcXVhbCBsZW5ndGg6ICgpLT57Li4ufSB2cyAoKS0+ey4uLn0KICAvLyAgLSBXaXRoIDEgYXJndW1lbnQgY3VycnlpbmctbGFtYmRhcyBhbmQgaW50ZXJmYWNlLWxhbWJkYXMgYXJlIG9mIGVxdWFsIGxlbmd0aDogYS0+ey4uLn0gdnMgYS0+ey4uLn0KICAvLyAgLSBXaXRoIDIgYXJndW1lbnRzIGN1cnJ5aW5nLWxhbWJkYXMgYXJlIDEgYnl0ZSBzaG9ydGVyIHRoYW4gaW50ZXJmYWNlLWxhbWJkYXM6IGEtPmItPnsuLi59IHZzIChhLGIpLT57Li4ufQogIC8vICAtIFdpdGggMyBhcmd1bWVudHMgY3VycnlpbmctbGFtYmRhcyBhbmQgaW50ZXJmYWNlLWxhbWJkYXMgYXJlIG9mIGVxdWFsIGxlbmd0aDogYS0+Yi0+Yy0+ey4uLn0gdnMgKGEsYixjKS0+ey4uLn0KICAvLyAgLSBXaXRoIDQgb3IgbW9yZSBhcmd1bWVudHMgY3VycnlpbmctbGFtYmRhcyBhcmUgbG9uZ2VyIHRoYW4gaW50ZXJmYWNlLWxhbWJkYXM6IGEtPmItPmMtPmQtPnsuLi59IHZzIChhLGIsYyxkKS0+ey4uLn0KICAKICAvLyBVc2luZyBhIFZvaWQgbnVsbCBhcmd1bWVudCBpcyBhbHNvIHVzZWZ1bCBmb3IgY29kZS1nb2xmaW5nLCBiZWNhdXNlIHYtPnsuLi59IGlzIDEgYnl0ZSBzaG9ydGVyIHRoYW4gKCktPnsuLi59CiAgaW50ZXJmYWNlIFp7CiAgICBTdHJpbmcgeihWb2lkIHYpOwogIH0KICBzdGF0aWMgWiB6ID0gdi0+IlogWiI7IC8vIHNob3J0IGZvciB2LT57cmV0dXJuICJaIFoiO307CgogIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpewogICAgYS5hKCk7CiAgICBiLmIoIkIgQiIpOwogICAgU3lzdGVtLm91dC5wcmludGxuKGMuYygpKTsKICAgIFN5c3RlbS5vdXQucHJpbnRsbihkLmQoIkQiKSk7CiAgICBlLnJ1bigpOyAvLyBSdW5uYWJsZSBoYXMgdGhlIHJ1bigpIG1ldGhvZCB0byBleGVjdXRlIHRoZSBsYW1iZGEKICAgIGYuYWNjZXB0KCJGIEYiKTsgLy8gQ29uc3VtZXIgaGFzIHRoZSBhY2NlcHQoLi4uKSBtZXRob2QgdG8gZXhlY3V0ZSB0aGUgbGFtYmRhCiAgICBTeXN0ZW0ub3V0LnByaW50bG4oZy5nZXQoKSk7IC8vIFN1cHBsaWVyIGhhcyB0aGUgZ2V0KCkgbWV0aG9kIHRvIGV4ZWN1dGUgdGhlIGxhbWJkYQogICAgU3lzdGVtLm91dC5wcmludGxuKGguYXBwbHkoIkgiKSk7IC8vIEZ1bmN0aW9uIGhhcyB0aGUgYXBwbHkoLi4uKSBtZXRob2QgdG8gZXhlY3V0ZSB0aGUgbGFtYmRhCiAgICBTeXN0ZW0ub3V0LnByaW50bG4oeC54KCJYIiwiWCIpKTsKICAgIFN5c3RlbS5vdXQucHJpbnRsbih5LmFwcGx5KCJZIikuYXBwbHkoIlkiKSk7CiAgICBTeXN0ZW0ub3V0LnByaW50bG4oei56KG51bGwpKTsKICB9Cn0=