diff --git a/core/src/main/java/org/apache/servicecomb/core/transport/AbstractTransport.java b/core/src/main/java/org/apache/servicecomb/core/transport/AbstractTransport.java
index c75ce25..24278d3 100644
--- a/core/src/main/java/org/apache/servicecomb/core/transport/AbstractTransport.java
+++ b/core/src/main/java/org/apache/servicecomb/core/transport/AbstractTransport.java
@@ -88,9 +88,7 @@
       addressWithoutSchema += "&";
     }
 
-    String encodedQuery = URLEncodedUtils.format(pairs.entrySet().stream().map(entry -> {
-      return new BasicNameValuePair(entry.getKey(), entry.getValue());
-    }).collect(Collectors.toList()), StandardCharsets.UTF_8.name());
+    String encodedQuery = URLEncodedUtils.format(pairs.entrySet().stream().map(entry -> new BasicNameValuePair(entry.getKey(), entry.getValue())).collect(Collectors.toList()), StandardCharsets.UTF_8.name());
 
     addressWithoutSchema += encodedQuery;
 
diff --git a/foundations/foundation-config/src/test/java/org/apache/servicecomb/config/TestYAMLUtil.java b/foundations/foundation-config/src/test/java/org/apache/servicecomb/config/TestYAMLUtil.java
index 6a5ad96..6694ace 100644
--- a/foundations/foundation-config/src/test/java/org/apache/servicecomb/config/TestYAMLUtil.java
+++ b/foundations/foundation-config/src/test/java/org/apache/servicecomb/config/TestYAMLUtil.java
@@ -68,9 +68,7 @@
 
   @Test
   public void testYamlConfig() {
-    RuntimeException runtimeException = Assertions.assertThrows(RuntimeException.class, () -> {
-      YAMLUtil.yaml2Properties("servicecomb.service.registry.enabled: {{true}}");
-    });
+    RuntimeException runtimeException = Assertions.assertThrows(RuntimeException.class, () -> YAMLUtil.yaml2Properties("servicecomb.service.registry.enabled: {{true}}"));
     Assertions.assertEquals("input cannot be convert to map", runtimeException.getMessage());
   }
 
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/FrameworkVersions.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/FrameworkVersions.java
index dd4bf78..e655119 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/FrameworkVersions.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/FrameworkVersions.java
@@ -25,9 +25,7 @@
 
   public static String allVersions() {
     StringBuffer sb = new StringBuffer();
-    frameworkVersions.forEach(version -> version.loadVersion().forEach((key, value) -> {
-      sb.append(key).append(":").append(value).append(";");
-    }));
+    frameworkVersions.forEach(version -> version.loadVersion().forEach((key, value) -> sb.append(key).append(":").append(value).append(";")));
     if (sb.length() > 0) {
       sb.setLength(sb.length() - 1);
     }
diff --git a/foundations/foundation-registry/src/test/java/org/apache/servicecomb/registry/discovery/TestDiscoveryTree.java b/foundations/foundation-registry/src/test/java/org/apache/servicecomb/registry/discovery/TestDiscoveryTree.java
index 8914419..19eae3d 100644
--- a/foundations/foundation-registry/src/test/java/org/apache/servicecomb/registry/discovery/TestDiscoveryTree.java
+++ b/foundations/foundation-registry/src/test/java/org/apache/servicecomb/registry/discovery/TestDiscoveryTree.java
@@ -215,9 +215,7 @@
     discoveryTree.addFilter(filter);
 
     ServiceCombException exception = Assertions.assertThrows(ServiceCombException.class,
-            () -> {
-              result = discoveryTree.discovery(context, null, null, null);
-            });
+            () -> result = discoveryTree.discovery(context, null, null, null));
     Assertions.assertEquals(filter.getClass().getName() + " discovery return null.", exception.getMessage());
   }
 
diff --git a/foundations/foundation-registry/src/test/java/org/apache/servicecomb/registry/version/TestVersion.java b/foundations/foundation-registry/src/test/java/org/apache/servicecomb/registry/version/TestVersion.java
index 32e546f..737cc26 100644
--- a/foundations/foundation-registry/src/test/java/org/apache/servicecomb/registry/version/TestVersion.java
+++ b/foundations/foundation-registry/src/test/java/org/apache/servicecomb/registry/version/TestVersion.java
@@ -68,84 +68,64 @@
 
   @Test
   public void constructFromStringInvalidNull() {
-    Assertions.assertThrows(NullPointerException.class, () -> {
-      version = new Version(null);
-    });
+    Assertions.assertThrows(NullPointerException.class, () -> version = new Version(null));
   }
 
   @Test
   public void constructFromStringInvalidEmpty() {
-    IllegalStateException exception = Assertions.assertThrows(IllegalStateException.class, () -> {
-      version = new Version("");
-    });
+    IllegalStateException exception = Assertions.assertThrows(IllegalStateException.class, () -> version = new Version(""));
     Assertions.assertEquals("Invalid major \"\", version \"\".", exception.getMessage());
     Assertions.assertTrue(exception.getCause() instanceof NumberFormatException);
   }
 
   @Test
   public void constructFromStringInvalidMajorNegative() {
-    IllegalStateException exception = Assertions.assertThrows(IllegalStateException.class, () -> {
-      version = new Version("-1");
-    });
+    IllegalStateException exception = Assertions.assertThrows(IllegalStateException.class, () -> version = new Version("-1"));
     Assertions.assertEquals("major \"-1\" can not be negative, version \"-1\".", exception.getMessage());
   }
 
   @Test
   public void constructFromStringInvalidMajorDot() {
-    IllegalStateException exception = Assertions.assertThrows(IllegalStateException.class, () -> {
-      version = new Version("1.");
-    });
+    IllegalStateException exception = Assertions.assertThrows(IllegalStateException.class, () -> version = new Version("1."));
     Assertions.assertEquals("Invalid minor \"\", version \"1.\".", exception.getMessage());
     Assertions.assertTrue(exception.getCause() instanceof NumberFormatException);
   }
 
   @Test
   public void constructFromStringInvalidMinorNegative() {
-    IllegalStateException exception = Assertions.assertThrows(IllegalStateException.class, () -> {
-      version = new Version("1.-1");
-    });
+    IllegalStateException exception = Assertions.assertThrows(IllegalStateException.class, () -> version = new Version("1.-1"));
     Assertions.assertEquals("minor \"-1\" can not be negative, version \"1.-1\".", exception.getMessage());
   }
 
   @Test
   public void constructFromStringInvalidMinorDot() {
-    IllegalStateException exception = Assertions.assertThrows(IllegalStateException.class, () -> {
-      version = new Version("1.1.");
-    });
+    IllegalStateException exception = Assertions.assertThrows(IllegalStateException.class, () -> version = new Version("1.1."));
     Assertions.assertEquals("Invalid patch \"\", version \"1.1.\".", exception.getMessage());
     Assertions.assertTrue(exception.getCause() instanceof NumberFormatException);
   }
 
   @Test
   public void constructFromStringInvalidPatchNegative() {
-    IllegalStateException exception = Assertions.assertThrows(IllegalStateException.class, () -> {
-      version = new Version("1.1.-1");
-    });
+    IllegalStateException exception = Assertions.assertThrows(IllegalStateException.class, () -> version = new Version("1.1.-1"));
     Assertions.assertEquals("patch \"-1\" can not be negative, version \"1.1.-1\".", exception.getMessage());
   }
 
   @Test
   public void constructFromStringInvalidPatchDot() {
-    IllegalStateException exception = Assertions.assertThrows(IllegalStateException.class, () -> {
-      version = new Version("1.1.1.");
-    });
+    IllegalStateException exception = Assertions.assertThrows(IllegalStateException.class, () -> version = new Version("1.1.1."));
     Assertions.assertEquals("Invalid build \"\", version \"1.1.1.\".", exception.getMessage());
     Assertions.assertTrue(exception.getCause() instanceof NumberFormatException);
   }
 
   @Test
   public void constructFromStringInvalidBuildNegative() {
-    IllegalStateException exception = Assertions.assertThrows(IllegalStateException.class, () -> {
-      version = new Version("1.1.1.-1");
-    });
+    IllegalStateException exception = Assertions.assertThrows(IllegalStateException.class, () -> version = new Version("1.1.1.-1"));
     Assertions.assertEquals("build \"-1\" can not be negative, version \"1.1.1.-1\".", exception.getMessage());
   }
 
   @Test
   public void constructFromStringInvalidTooManyPart() {
-    IllegalStateException exception = Assertions.assertThrows(IllegalStateException.class, () -> {
-      version = new Version("1.1.1.1.");
-    });
+    IllegalStateException exception = Assertions.assertThrows(IllegalStateException.class, () -> version = new Version("1.1.1.1."));
     Assertions.assertEquals("Invalid version \"1.1.1.1.\".", exception.getMessage());
   }
 
diff --git a/foundations/foundation-registry/src/test/java/org/apache/servicecomb/registry/version/TestVersionRuleUtils.java b/foundations/foundation-registry/src/test/java/org/apache/servicecomb/registry/version/TestVersionRuleUtils.java
index 8b6c53a..e51af7a 100644
--- a/foundations/foundation-registry/src/test/java/org/apache/servicecomb/registry/version/TestVersionRuleUtils.java
+++ b/foundations/foundation-registry/src/test/java/org/apache/servicecomb/registry/version/TestVersionRuleUtils.java
@@ -57,9 +57,7 @@
 
   @Test
   public void invalid() {
-    IllegalStateException exception = Assertions.assertThrows(IllegalStateException.class, () -> {
-      VersionRuleUtils.getOrCreate("");
-    });
+    IllegalStateException exception = Assertions.assertThrows(IllegalStateException.class, () -> VersionRuleUtils.getOrCreate(""));
     Assertions.assertEquals("Invalid major \"\", version \"\".", exception.getMessage());
   }
 }
diff --git a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/http/HttpClients.java b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/http/HttpClients.java
index 1f62e4a..d763b4d 100644
--- a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/http/HttpClients.java
+++ b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/http/HttpClients.java
@@ -75,9 +75,7 @@
   public static void destroy() {
     httpClients.clear();
     List<HttpClientOptionsSPI> clientOptionsList = SPIServiceUtils.getOrLoadSortedService(HttpClientOptionsSPI.class);
-    clientOptionsList.forEach(option -> {
-      VertxUtils.blockCloseVertxByName(option.clientName());
-    });
+    clientOptionsList.forEach(option -> VertxUtils.blockCloseVertxByName(option.clientName()));
   }
 
   private static ClientPoolManager<HttpClientWithContext> createClientPoolManager(HttpClientOptionsSPI option) {
diff --git a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/tcp/TcpRequest.java b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/tcp/TcpRequest.java
index 0dd2a12..6ca90ad 100644
--- a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/tcp/TcpRequest.java
+++ b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/tcp/TcpRequest.java
@@ -50,9 +50,7 @@
       return;
     }
 
-    callContext.runOnContext(Void -> {
-      responseCallback.success(tcpData);
-    });
+    callContext.runOnContext(Void -> responseCallback.success(tcpData));
   }
 
   public void onSendError(Throwable e) {
diff --git a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/executor/VertxWorkerExecutor.java b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/executor/VertxWorkerExecutor.java
index 6fcbe68..7f19f91 100644
--- a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/executor/VertxWorkerExecutor.java
+++ b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/executor/VertxWorkerExecutor.java
@@ -25,9 +25,7 @@
 
   @Override
   public void execute(Runnable command) {
-    Vertx.currentContext().owner().executeBlocking(future -> {
-          command.run();
-        },
+    Vertx.currentContext().owner().executeBlocking(future -> command.run(),
         false,
         null);
   }
diff --git a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/http/ReadStreamPart.java b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/http/ReadStreamPart.java
index 4f90269..fe6fdd9 100644
--- a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/http/ReadStreamPart.java
+++ b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/http/ReadStreamPart.java
@@ -143,9 +143,7 @@
 
     context.runOnContext((v) -> {
       Vertx vertx = context.owner();
-      vertx.fileSystem().open(file.getAbsolutePath(), openOptions, ar -> {
-        onFileOpened(file, ar, future);
-      });
+      vertx.fileSystem().open(file.getAbsolutePath(), openOptions, ar -> onFileOpened(file, ar, future));
     });
 
     return future;
@@ -159,22 +157,20 @@
 
     AsyncFile asyncFile = ar.result();
     CompletableFuture<Void> saveFuture = saveToWriteStream(asyncFile);
-    saveFuture.whenComplete((v, saveException) -> {
-      asyncFile.close(closeAr -> {
-        if (closeAr.failed()) {
-          LOGGER.error("Failed to close file {}.", file);
-        }
+    saveFuture.whenComplete((v, saveException) -> asyncFile.close(closeAr -> {
+      if (closeAr.failed()) {
+        LOGGER.error("Failed to close file {}.", file);
+      }
 
-        // whatever close success or failed
-        // will not affect to result
-        // result just only related to write
-        if (saveException == null) {
-          future.complete(file);
-          return;
-        }
+      // whatever close success or failed
+      // will not affect to result
+      // result just only related to write
+      if (saveException == null) {
+        future.complete(file);
+        return;
+      }
 
-        future.completeExceptionally(saveException);
-      });
-    });
+      future.completeExceptionally(saveException);
+    }));
   }
 }
diff --git a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/server/TcpServer.java b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/server/TcpServer.java
index 49fbe01..46608d1 100644
--- a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/server/TcpServer.java
+++ b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/server/TcpServer.java
@@ -78,9 +78,7 @@
       TcpServerConnection connection = createTcpServerConnection();
       connection.init(netSocket);
     });
-    netServer.exceptionHandler(e -> {
-      LOGGER.error("Unexpected error in server.{}", ExceptionUtils.getExceptionMessageWithoutTrace(e));
-    });
+    netServer.exceptionHandler(e -> LOGGER.error("Unexpected error in server.{}", ExceptionUtils.getExceptionMessageWithoutTrace(e)));
     InetSocketAddress socketAddress = endpointObject.getSocketAddress();
     netServer.listen(socketAddress.getPort(), socketAddress.getHostString(), ar -> {
       if (ar.succeeded()) {
diff --git a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/server/TcpServerConnection.java b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/server/TcpServerConnection.java
index 348a3f8..409b9ee 100644
--- a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/server/TcpServerConnection.java
+++ b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/server/TcpServerConnection.java
@@ -36,17 +36,13 @@
     LOGGER.info("connect from {}, in thread {}",
         remoteAddress,
         Thread.currentThread().getName());
-    netSocket.exceptionHandler(e -> {
-      LOGGER.error("disconected from {}, in thread {}, cause {}",
-          remoteAddress,
-          Thread.currentThread().getName(),
-          e.getMessage());
-    });
-    netSocket.closeHandler(Void -> {
-      LOGGER.error("disconected from {}, in thread {}",
-          remoteAddress,
-          Thread.currentThread().getName());
-    });
+    netSocket.exceptionHandler(e -> LOGGER.error("disconected from {}, in thread {}, cause {}",
+        remoteAddress,
+        Thread.currentThread().getName(),
+        e.getMessage()));
+    netSocket.closeHandler(Void -> LOGGER.error("disconected from {}, in thread {}",
+        remoteAddress,
+        Thread.currentThread().getName()));
 
     netSocket.handler(splitter);
   }
diff --git a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/tcp/TcpConnection.java b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/tcp/TcpConnection.java
index 8cd9811..f498697 100644
--- a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/tcp/TcpConnection.java
+++ b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/tcp/TcpConnection.java
@@ -93,9 +93,7 @@
 
   // notify context thread to write
   protected void scheduleWrite() {
-    context.runOnContext(v -> {
-      writeInContext();
-    });
+    context.runOnContext(v -> writeInContext());
   }
 
   protected void writeInContext() {
diff --git a/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/client/tcp/TestNetClientWrapper.java b/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/client/tcp/TestNetClientWrapper.java
index da106f4..adbcd3e 100644
--- a/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/client/tcp/TestNetClientWrapper.java
+++ b/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/client/tcp/TestNetClientWrapper.java
@@ -100,12 +100,8 @@
     };
 
     List<NetSocket> socks = new ArrayList<>();
-    netClientWrapper.connect(false, port, host, asyncSocket -> {
-      socks.add(asyncSocket.result());
-    });
-    netClientWrapper.connect(true, port, host, asyncSocket -> {
-      socks.add(asyncSocket.result());
-    });
+    netClientWrapper.connect(false, port, host, asyncSocket -> socks.add(asyncSocket.result()));
+    netClientWrapper.connect(true, port, host, asyncSocket -> socks.add(asyncSocket.result()));
 
     MatcherAssert.assertThat(socks, Matchers.contains(normalSocket, sslSocket));
   }
diff --git a/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/client/tcp/TestTcpClientConnection.java b/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/client/tcp/TestTcpClientConnection.java
index 4f16c0a..0767898 100644
--- a/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/client/tcp/TestTcpClientConnection.java
+++ b/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/client/tcp/TestTcpClientConnection.java
@@ -249,9 +249,7 @@
   public void on_exist() {
     long msgId = 1L;
     AtomicInteger count = new AtomicInteger();
-    requestMap.put(msgId, new TcpRequest(10, ar -> {
-      count.incrementAndGet();
-    }));
+    requestMap.put(msgId, new TcpRequest(10, ar -> count.incrementAndGet()));
 
     tcpClientConnection.onReply(msgId, null, null);
     Assertions.assertEquals(1, count.get());
diff --git a/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/http/TestAbstractHttpServletResponse.java b/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/http/TestAbstractHttpServletResponse.java
index 845e374..9b85cb1 100644
--- a/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/http/TestAbstractHttpServletResponse.java
+++ b/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/http/TestAbstractHttpServletResponse.java
@@ -91,9 +91,7 @@
 
   @Test
   public void testFlushBuffer() {
-    Error error = Assertions.assertThrows(Error.class, () -> {
-      response.flushBuffer();
-    });
+    Error error = Assertions.assertThrows(Error.class, () -> response.flushBuffer());
     checkError(error);
   }
 
@@ -123,9 +121,7 @@
 
   @Test
   public void testGetLocale() {
-    Error error = Assertions.assertThrows(Error.class, () -> {
-      response.getLocale();
-    });
+    Error error = Assertions.assertThrows(Error.class, () -> response.getLocale());
     checkError(error);
   }
 
diff --git a/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/http/TestReadStreamPart.java b/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/http/TestReadStreamPart.java
index be7d539..baaa331 100644
--- a/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/http/TestReadStreamPart.java
+++ b/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/http/TestReadStreamPart.java
@@ -141,9 +141,7 @@
       }
     }.getMockInstance();
 
-    ExecutionException exception = Assertions.assertThrows(ExecutionException.class, () -> {
-      part.saveToWriteStream(writeStream).get();
-    });
+    ExecutionException exception = Assertions.assertThrows(ExecutionException.class, () -> part.saveToWriteStream(writeStream).get());
     Assertions.assertTrue(exception.getCause() instanceof RuntimeException);
   }
 
@@ -157,9 +155,7 @@
       }
     };
 
-    ExecutionException exception = Assertions.assertThrows(ExecutionException.class, () -> {
-      part.saveToWriteStream(writeStream).get();
-    });
+    ExecutionException exception = Assertions.assertThrows(ExecutionException.class, () -> part.saveToWriteStream(writeStream).get());
     Assertions.assertTrue(exception.getCause() instanceof RuntimeException);
   }
 
diff --git a/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/http/TestStandardHttpServletResponseEx.java b/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/http/TestStandardHttpServletResponseEx.java
index 43a7bed..d7b0564 100644
--- a/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/http/TestStandardHttpServletResponseEx.java
+++ b/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/http/TestStandardHttpServletResponseEx.java
@@ -162,8 +162,6 @@
       }
     };
 
-    Assertions.assertThrows(RuntimeException.class, () -> {
-      responseEx.sendPart(part).get();
-    });
+    Assertions.assertThrows(RuntimeException.class, () -> responseEx.sendPart(part).get());
   }
 }
diff --git a/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/http/TestVertxServerResponseToHttpServletResponse.java b/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/http/TestVertxServerResponseToHttpServletResponse.java
index 367eb60..cf6d5aa 100644
--- a/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/http/TestVertxServerResponseToHttpServletResponse.java
+++ b/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/http/TestVertxServerResponseToHttpServletResponse.java
@@ -172,9 +172,7 @@
       }
     };
 
-    NullPointerException exception = Assertions.assertThrows(NullPointerException.class, () -> {
-      new VertxServerResponseToHttpServletResponse(serverResponse);
-    });
+    NullPointerException exception = Assertions.assertThrows(NullPointerException.class, () -> new VertxServerResponseToHttpServletResponse(serverResponse));
     Assertions.assertEquals("must run in vertx context.", exception.getMessage());
   }
 
diff --git a/handlers/handler-bizkeeper/src/test/java/org/apache/servicecomb/bizkeeper/TestBizkeeperHandler.java b/handlers/handler-bizkeeper/src/test/java/org/apache/servicecomb/bizkeeper/TestBizkeeperHandler.java
index dc4c307..dbbb769 100644
--- a/handlers/handler-bizkeeper/src/test/java/org/apache/servicecomb/bizkeeper/TestBizkeeperHandler.java
+++ b/handlers/handler-bizkeeper/src/test/java/org/apache/servicecomb/bizkeeper/TestBizkeeperHandler.java
@@ -130,9 +130,7 @@
         .thenReturn("testHandleForceThrowException");
     System.setProperty("servicecomb.fallback.Group_Name.testHandleForceThrowException.force", "true");
     System.setProperty("servicecomb.fallbackpolicy.Group_Name.testHandleForceThrowException.policy", "throwexception");
-    bizkeeperHandler.handle(invocation, f -> {
-      Assertions.assertTrue(f.isFailed());
-    });
+    bizkeeperHandler.handle(invocation, f -> Assertions.assertTrue(f.isFailed()));
   }
 
   @Test
@@ -166,9 +164,7 @@
       asyncRsp.fail(InvocationType.CONSUMER, new Exception("testHandleInError"));
       return null;
     }).when(invocation).next(Mockito.any(AsyncResponse.class));
-    bizkeeperHandler.handle(invocation, f -> {
-      Assertions.assertTrue(f.isFailed());
-    });
+    bizkeeperHandler.handle(invocation, f -> Assertions.assertTrue(f.isFailed()));
   }
 
   @Test
@@ -178,9 +174,7 @@
     Mockito.when(invocation.getOperationMeta().getMicroserviceQualifiedName())
         .thenReturn("testHandlNextException");
     Mockito.doThrow(new Exception("testHandlNextException")).when(invocation).next(Mockito.any(AsyncResponse.class));
-    bizkeeperHandler.handle(invocation, f -> {
-      Assertions.assertTrue(f.isFailed());
-    });
+    bizkeeperHandler.handle(invocation, f -> Assertions.assertTrue(f.isFailed()));
   }
 
   @Test
@@ -194,8 +188,6 @@
       asyncRsp.success("");
       return null;
     }).when(invocation).next(Mockito.any(AsyncResponse.class));
-    bizkeeperHandler.handle(invocation, f -> {
-      Assertions.assertTrue(f.isSucceed());
-    });
+    bizkeeperHandler.handle(invocation, f -> Assertions.assertTrue(f.isSucceed()));
   }
 }
diff --git a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadBalanceHandler2.java b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadBalanceHandler2.java
index 8857a70..f442511 100644
--- a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadBalanceHandler2.java
+++ b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadBalanceHandler2.java
@@ -473,9 +473,7 @@
 
   @Test
   public void testZoneAwareAndIsolationFilterUsingMockedInvocationWorks() throws Exception {
-    Invocation invocation = new NonSwaggerInvocation("testApp", "testMicroserviceName", "0.0.0+", (inv, aysnc) -> {
-      aysnc.success("OK");
-    });
+    Invocation invocation = new NonSwaggerInvocation("testApp", "testMicroserviceName", "0.0.0+", (inv, aysnc) -> aysnc.success("OK"));
 
     InstanceCacheManager instanceCacheManager = Mockito.mock(InstanceCacheManager.class);
     TransportManager transportManager = Mockito.mock(TransportManager.class);
@@ -553,18 +551,14 @@
     loadBalancer = handler.getOrCreateLoadBalancer(invocation);
     server = loadBalancer.chooseServer(invocation);
     Assertions.assertEquals("rest://localhost:7092", server.getEndpoint().getEndpoint());
-    handler.handle(invocation, (response) -> {
-      Assertions.assertEquals("OK", response.getResult());
-    });
+    handler.handle(invocation, (response) -> Assertions.assertEquals("OK", response.getResult()));
 
     data.put("regionMatchInstance", regionMatchInstance);
     parent.cacheVersion(parent.cacheVersion() + 1);
     loadBalancer = handler.getOrCreateLoadBalancer(invocation);
     server = loadBalancer.chooseServer(invocation);
     Assertions.assertEquals("rest://localhost:7091", server.getEndpoint().getEndpoint());
-    handler.handle(invocation, (response) -> {
-      Assertions.assertEquals("OK", response.getResult());
-    });
+    handler.handle(invocation, (response) -> Assertions.assertEquals("OK", response.getResult()));
 
     data.put("allmatchInstance", allmatchInstance);
     parent.cacheVersion(parent.cacheVersion() + 1);
@@ -604,18 +598,14 @@
     loadBalancer = handler.getOrCreateLoadBalancer(invocation);
     server = loadBalancer.chooseServer(invocation);
     Assertions.assertEquals("rest://localhost:7091", server.getEndpoint().getEndpoint());
-    handler.handle(invocation, (response) -> {
-      Assertions.assertEquals("OK", response.getResult());
-    });
+    handler.handle(invocation, (response) -> Assertions.assertEquals("OK", response.getResult()));
   }
 
   @Test
   public void testStatusFilterUsingMockedInvocationWorks() throws Exception {
     ArchaiusUtils.setProperty("servicecomb.loadbalance.filter.status.enabled", "false");
 
-    Invocation invocation = new NonSwaggerInvocation("testApp", "testMicroserviceName", "0.0.0+", (inv, aysnc) -> {
-      aysnc.success("OK");
-    });
+    Invocation invocation = new NonSwaggerInvocation("testApp", "testMicroserviceName", "0.0.0+", (inv, aysnc) -> aysnc.success("OK"));
 
     InstanceCacheManager instanceCacheManager = Mockito.mock(InstanceCacheManager.class);
     TransportManager transportManager = Mockito.mock(TransportManager.class);
@@ -694,18 +684,14 @@
     loadBalancer = handler.getOrCreateLoadBalancer(invocation);
     server = loadBalancer.chooseServer(invocation);
     Assertions.assertEquals("rest://localhost:7092", server.getEndpoint().getEndpoint());
-    handler.handle(invocation, (response) -> {
-      Assertions.assertEquals("OK", response.getResult());
-    });
+    handler.handle(invocation, (response) -> Assertions.assertEquals("OK", response.getResult()));
 
     data.put("regionMatchInstance", regionMatchInstance);
     parent.cacheVersion(parent.cacheVersion() + 1);
     loadBalancer = handler.getOrCreateLoadBalancer(invocation);
     server = loadBalancer.chooseServer(invocation);
     Assertions.assertEquals("rest://localhost:7091", server.getEndpoint().getEndpoint());
-    handler.handle(invocation, (response) -> {
-      Assertions.assertEquals("OK", response.getResult());
-    });
+    handler.handle(invocation, (response) -> Assertions.assertEquals("OK", response.getResult()));
 
     data.put("allmatchInstance", allmatchInstance);
     parent.cacheVersion(parent.cacheVersion() + 1);
@@ -745,9 +731,7 @@
     loadBalancer = handler.getOrCreateLoadBalancer(invocation);
     server = loadBalancer.chooseServer(invocation);
     Assertions.assertEquals("rest://localhost:7091", server.getEndpoint().getEndpoint());
-    handler.handle(invocation, (response) -> {
-      Assertions.assertEquals("OK", response.getResult());
-    });
+    handler.handle(invocation, (response) -> Assertions.assertEquals("OK", response.getResult()));
   }
 
   @Test
diff --git a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadbalanceHandler.java b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadbalanceHandler.java
index 151e318..232f99e 100644
--- a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadbalanceHandler.java
+++ b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadbalanceHandler.java
@@ -164,6 +164,7 @@
 
     Holder<Throwable> result = new Holder<>();
     handler.send(invocation, resp -> result.value = resp.getResult(), loadBalancer);
+
     // InvocationException is not taken as a failure
     Assertions.assertEquals(0,
         loadBalancer.getLoadBalancerStats().getSingleServerStat(server).getSuccessiveConnectionFailureCount());
diff --git a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestThreadPoolMetersInitializer.java b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestThreadPoolMetersInitializer.java
index 11299af..ea908c8 100644
--- a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestThreadPoolMetersInitializer.java
+++ b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestThreadPoolMetersInitializer.java
@@ -135,9 +135,7 @@
 
     PolledMeter.update(registry);
     List<String> result = new ArrayList<>();
-    registry.iterator().forEachRemaining(meter -> {
-      result.add(meter.measure().toString());
-    });
+    registry.iterator().forEachRemaining(meter -> result.add(meter.measure().toString()));
 
     MatcherAssert.assertThat(result,
         Matchers.containsInAnyOrder("[Measurement(threadpool.maxThreads:id=groupExecutor-group0,0,0.0)]",
diff --git a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestVertxMetersInitializer.java b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestVertxMetersInitializer.java
index da75c76..564eb64 100644
--- a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestVertxMetersInitializer.java
+++ b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestVertxMetersInitializer.java
@@ -68,9 +68,7 @@
     @Override
     public void start(Promise<Void> startPromise) {
       Router mainRouter = Router.router(vertx);
-      mainRouter.route("/").handler(context -> {
-        context.response().end(context.getBody());
-      });
+      mainRouter.route("/").handler(context -> context.response().end(context.getBody()));
 
       HttpServer server = vertx.createHttpServer();
       server.requestHandler(mainRouter);
@@ -95,9 +93,7 @@
           HttpClientRequest request = ar.result();
           request.send(body, resp -> {
             if (resp.succeeded()) {
-              resp.result().bodyHandler((buffer) -> {
-                startPromise.complete();
-              });
+              resp.result().bodyHandler((buffer) -> startPromise.complete());
             }
           });
         }
diff --git a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/ServiceCenterRegistration.java b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/ServiceCenterRegistration.java
index 12cc45f..70a2ecf 100644
--- a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/ServiceCenterRegistration.java
+++ b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/ServiceCenterRegistration.java
@@ -86,9 +86,7 @@
 
   @Override
   public void addSchema(String schemaId, String content) {
-    RegistryUtils.executeOnEachServiceRegistry(sr -> {
-      sr.getMicroservice().addSchema(schemaId, content);
-    });
+    RegistryUtils.executeOnEachServiceRegistry(sr -> sr.getMicroservice().addSchema(schemaId, content));
   }
 
   @Override
@@ -101,9 +99,7 @@
 
   @Override
   public void addBasePath(Collection<BasePath> basePaths) {
-    RegistryUtils.executeOnEachServiceRegistry(sr -> {
-      sr.getMicroservice().getPaths().addAll(basePaths);
-    });
+    RegistryUtils.executeOnEachServiceRegistry(sr -> sr.getMicroservice().getPaths().addAll(basePaths));
   }
 
   @Override
diff --git a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/client/http/ServiceRegistryClientImpl.java b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/client/http/ServiceRegistryClientImpl.java
index 4657dc3..32effa0 100644
--- a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/client/http/ServiceRegistryClientImpl.java
+++ b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/client/http/ServiceRegistryClientImpl.java
@@ -739,9 +739,7 @@
           }, e -> {
             watchErrorHandler(e, selfMicroserviceId, callback);
             onClose.success(null);
-          }, f -> {
-            watchErrorHandler(f, selfMicroserviceId, callback);
-          });
+          }, f -> watchErrorHandler(f, selfMicroserviceId, callback));
         }
       }
     }
diff --git a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/registry/cache/AggregateServiceRegistryCache.java b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/registry/cache/AggregateServiceRegistryCache.java
index 687cccc..e10ff9e 100644
--- a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/registry/cache/AggregateServiceRegistryCache.java
+++ b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/registry/cache/AggregateServiceRegistryCache.java
@@ -76,9 +76,7 @@
         .collect(Collectors.toList());
 
     LOGGER.info("[{}] caches get refreshed", refreshedAggregateMicroserviceCaches.size());
-    refreshedAggregateMicroserviceCaches.forEach(cache -> {
-      LOGGER.info("[{}]: status={}, revisionId={}", cache.getKey(), cache.getStatus(), cache.getRevisionId());
-    });
+    refreshedAggregateMicroserviceCaches.forEach(cache -> LOGGER.info("[{}]: status={}, revisionId={}", cache.getKey(), cache.getStatus(), cache.getRevisionId()));
 
     if (null != cacheRefreshedWatcher) {
       cacheRefreshedWatcher.accept(refreshedAggregateMicroserviceCaches);
diff --git a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/client/LocalServiceRegistryClientImplTest.java b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/client/LocalServiceRegistryClientImplTest.java
index 0d96b6c..75ed926 100644
--- a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/client/LocalServiceRegistryClientImplTest.java
+++ b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/client/LocalServiceRegistryClientImplTest.java
@@ -153,9 +153,7 @@
   public void registerSchema_microserviceNotExist() {
     mockRegisterMicroservice(appId, microserviceName, "1.0.0");
 
-    IllegalArgumentException exception = Assertions.assertThrows(IllegalArgumentException.class, () -> {
-      registryClient.registerSchema("notExist", "sid", "content");
-    });
+    IllegalArgumentException exception = Assertions.assertThrows(IllegalArgumentException.class, () -> registryClient.registerSchema("notExist", "sid", "content"));
     Assertions.assertEquals("Invalid serviceId, serviceId=notExist", exception.getMessage());
   }
 
diff --git a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/task/TestCompositeTask.java b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/task/TestCompositeTask.java
index 6d012fc..fb1451e 100644
--- a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/task/TestCompositeTask.java
+++ b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/task/TestCompositeTask.java
@@ -26,9 +26,7 @@
   public void testRun() {
     CompositeTask task = new CompositeTask();
     for (int idx = 0; idx < 3; idx++) {
-      task.addTask(() -> {
-        count++;
-      });
+      task.addTask(() -> count++);
     }
 
     task.run();
diff --git a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/task/TestMicroserviceRegisterTask.java b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/task/TestMicroserviceRegisterTask.java
index 9d62237..4e37d05 100644
--- a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/task/TestMicroserviceRegisterTask.java
+++ b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/task/TestMicroserviceRegisterTask.java
@@ -602,9 +602,7 @@
       registerTask.run();
     } catch (IllegalStateException exception) {
       isIllegalException = true;
-      List<LoggingEvent> events = collector.getEvents().stream().filter(e -> {
-        return MicroserviceRegisterTask.class.getName().equals(e.getLoggerName());
-      }).collect(Collectors.toList());
+      List<LoggingEvent> events = collector.getEvents().stream().filter(e -> MicroserviceRegisterTask.class.getName().equals(e.getLoggerName())).collect(Collectors.toList());
 
       Assertions.assertEquals("service center schema and local schema both are different:\n" +
           " service center schema:\n" +
diff --git a/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/model/TestSwaggerOperations.java b/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/model/TestSwaggerOperations.java
index 8e29e90..9270f34 100644
--- a/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/model/TestSwaggerOperations.java
+++ b/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/model/TestSwaggerOperations.java
@@ -31,9 +31,7 @@
         .findFirst().get()
         .getPost().setOperationId("");
 
-    IllegalStateException exception = Assertions.assertThrows(IllegalStateException.class, () -> {
-      new SwaggerOperations(swagger);
-    });
+    IllegalStateException exception = Assertions.assertThrows(IllegalStateException.class, () -> new SwaggerOperations(swagger));
     Assertions.assertEquals("OperationId can not be empty, path=/testboolean, httpMethod=POST.", exception.getMessage());
   }
 }
diff --git a/swagger/swagger-invocation/invocation-springmvc/src/main/java/org/apache/servicecomb/swagger/invocation/converter/PartListToMultipartListConverter.java b/swagger/swagger-invocation/invocation-springmvc/src/main/java/org/apache/servicecomb/swagger/invocation/converter/PartListToMultipartListConverter.java
index ffd3c43..b3b85e9 100644
--- a/swagger/swagger-invocation/invocation-springmvc/src/main/java/org/apache/servicecomb/swagger/invocation/converter/PartListToMultipartListConverter.java
+++ b/swagger/swagger-invocation/invocation-springmvc/src/main/java/org/apache/servicecomb/swagger/invocation/converter/PartListToMultipartListConverter.java
@@ -45,9 +45,7 @@
     @SuppressWarnings("unchecked")
     List<Part> partList = (List<Part>) value;
     List<PartToMultipartFile> fileList = new ArrayList<>();
-    partList.forEach(part -> {
-      fileList.add(new PartToMultipartFile(part));
-    });
+    partList.forEach(part -> fileList.add(new PartToMultipartFile(part)));
     return fileList;
   }
 }
diff --git a/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayClient.java b/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayClient.java
index d617e47..ee3c631 100644
--- a/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayClient.java
+++ b/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayClient.java
@@ -170,9 +170,7 @@
     Mockito.when(operationMeta.getConfig()).thenReturn(Mockito.mock(OperationConfig.class));
 
     Holder<Object> result = new Holder<>();
-    client.send(invocation, ar -> {
-      result.value = ar.getResult();
-    });
+    client.send(invocation, ar -> result.value = ar.getResult());
 
     return result.value;
   }
diff --git a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/RestServerVerticle.java b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/RestServerVerticle.java
index 345c538..1c2bf6e 100644
--- a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/RestServerVerticle.java
+++ b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/RestServerVerticle.java
@@ -116,9 +116,7 @@
         } else {
           LOGGER.error("Unexpected error in server.{}", ExceptionUtils.getExceptionMessageWithoutTrace(e));
         }
-        httpServerExceptionHandlers.forEach(httpServerExceptionHandler -> {
-          httpServerExceptionHandler.handle(e);
-        });
+        httpServerExceptionHandlers.forEach(httpServerExceptionHandler -> httpServerExceptionHandler.handle(e));
       });
       startListen(httpServer, startPromise);
     } catch (Throwable e) {
