2017-04-25 47 views
1

如何将以下代码(特别是public void run()方法)转换为使用Java 8的lambda?将匿名内部方法转换为Java中的Lambda 8

public class SampleApp { 

    public static void main(String[] args) { 
     Thread t1 = new Thread(new Runnable() { 

      @Override 
      public void run() { 
       for (int i = 0; i < 10; i++) { 
        System.out.println("Hello " + i); 
        try { 
         Thread.sleep(100); 
        } 
        catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 
       } 
      } 
     }); 

     t1.start(); 
    } 
} 

尝试:

Thread t1 = new Thread(new Runnable() -> { 

    for (int i = 0; i < 10; i++) { 
     System.out.println("Hello " + i); 
     try { 
      Thread.sleep(100); 
     } 
     catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    }; 

); 

但是Eclipse不断抛出错误...

+6

删除'新Runnable'。 –

+0

顺便说一句:只是因为你可以使用lambdas并不意味着你必须使用它们。我发现使用方法句柄更具可读性。这通常是一个好主意,如果lambda超过2行。 – eckes

回答

8

简单地删除new Runnable

Thread t1 = new Thread(() -> { /* body */ }); 

你可能要考虑拉动该机构伸到一个“真实”的方法,并使用方法参考代替:

static void doSomething() { /* body */ } 

public static void main(String[] args) { 
    Thread t1 = new Thread(SampleApp::doSomething); 
} 

大的拉姆达体没有特别的可读性。

0

你好,如果你想它内联,你可以做到这一点

final Thread t1 = new Thread(()->{ 
     for (int i = 0; i < 10; i++) { 
      System.out.println("Hello " + i); 
      try { Thread.sleep(100); } 
      catch (final InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
    });