Blog der Heimetli Software AG

Lambda ruft Lambda

Dass man Lambdas verschachteln kann, lässt mir einfach keine Ruhe. Aber natürlich will ich nicht einfach das Beispiel kopieren oder nur leicht abändern...

Heute habe ich mich wieder mal dahinter geklemmt, und hier ist das Resultat meiner Versuche. Es ist kein verschachteltes Lambda, sondern nur zwei Lambdas die von einem Lambda aufgerufen werden.

import java.util.function.Consumer ;

interface Runner
{
   void run( Consumer<String> first, Consumer<String> second ) ;
}

public class HelloWorld
{
   public static void main( String[] args )
   {
      ((Runner)(f,s) -> { f.accept("Hello "); s.accept("world!"); }).run( System.out::print, System.out::println ) ;
   }
}

Obwohl ich mein Ziel nicht erreicht habe, hat das Programm ein paar interessante Eigenschaften:

  • Der Typecast auf das Interface Runner um das Lambda ohne Variable auszuführen
  • Die Methodenreferenzen als Lambdas
  • Das Interface Consumer erspart ein eigenes Interface