如何在Javapoet中添加一个代码块作为MethodSpec语句的一部分



我想创建一个lambda表达式,如:

// some code
CompletableFuture.handle((s,t) -> {
if(t != null){
//some code}
else{
// some code}
});
//some code

我在CodeBlock代码中有if-else的所有逻辑,在MethodSpec方法中有父代码。

我正试图添加以下代码:

method.addStament("CompletableFuture.handle((s,t) -> $N)", code.build);

这显然不起作用!只需要Lamda部分的帮助。

任何帮助!

我试试这个:

/**
* Out code is below:
* 
* public void lambdaTest() {
*   CompletableFuture.supplyAsync(() -> 1).handle((num, throwable) ->  {
*     if (num > 2) {
*       return true;
*     }
*     return false;
*   } );
* }
* @return
*/
public MethodSpec lambdaTest() {
String param1 = "num", param2 = "throwable";
CodeBlock.Builder builder = CodeBlock.builder();
CodeBlock.Builder subBuilder = CodeBlock.builder();
subBuilder.beginControlFlow("if ($N > 2)", param1)
.addStatement("return true")
.endControlFlow()
.addStatement("return false");
builder.beginControlFlow("CompletableFuture.supplyAsync(() -> 1).handle(($N, $N) -> ", param1, param2)
.add(subBuilder.build())
.endControlFlow(")");
return MethodSpec
.methodBuilder("lambdaTest")
.addModifiers(Modifier.PUBLIC)
.returns(void.class)
.addCode(builder.build())
.build();
}