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

在Java8中将匿名内部方法转换为Lambda,java,lambda,java-8,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

如何使用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();
    }
}
公共类SampleApp{
公共静态void main(字符串[]args){
线程t1=新线程(新的可运行线程(){
@凌驾
公开募捐{
对于(int i=0;i<10;i++){
System.out.println(“Hello”+i);
试一试{
睡眠(100);
}
捕捉(中断异常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();
        }
    };

);
Thread t1=新线程(new Runnable()->{
对于(int i=0;i<10;i++){
System.out.println(“Hello”+i);
试一试{
睡眠(100);
}
捕捉(中断异常e){
e、 printStackTrace();
}
};
);

但是Eclipse不断抛出错误…

只需删除
新的Runnable

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

您可能想考虑将该实体拉入“真实”的方法中,并使用方法引用代替:

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

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

大的lambda实体不是特别可读。

只需删除
新的Runnable

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

您可能想考虑将该实体拉入“真实”的方法中,并使用方法引用代替:

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

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

大的lambda主体不是特别可读。

您好,如果您希望它内嵌,您可以这样做

    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();
            }
        }
    });
final Thread t1=新线程(()->{
对于(int i=0;i<10;i++){
System.out.println(“Hello”+i);
试试{Thread.sleep(100);}
捕获(最终中断异常e){
e、 printStackTrace();
}
}
});

嗨,如果你想让它内嵌,你可以这样做

    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();
            }
        }
    });
final Thread t1=新线程(()->{
对于(int i=0;i<10;i++){
System.out.println(“Hello”+i);
试试{Thread.sleep(100);}
捕获(最终中断异常e){
e、 printStackTrace();
}
}
});

删除
新的可运行的
。顺便说一句:仅仅因为你可以使用lambdas并不意味着你必须使用它们。我发现使用方法句柄更具可读性。如果lambda超过2行,这通常是个好主意。删除
新的可运行的
。顺便说一句:仅仅因为你可以使用lambdas并不意味着你必须使用它们如果lambda大于2行,那么使用方法句柄通常是个好主意。