在Java 8中将匿名内部方法转换为Lambda

Pac*_*ver 1 java lambda java-8

如何使用Java 8将以下代码(特别是public void run()方法)转换为lambda?

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

尝试:

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();
        }
    };

);
Run Code Online (Sandbox Code Playgroud)

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

And*_*ner 8

只需删除new Runnable:

Thread t1 = new Thread(() -> { /* body */ });
Run Code Online (Sandbox Code Playgroud)

您可能需要考虑将该主体拉出为"真实"方法,并使用方法引用:

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

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

大lambda体不是特别可读.