簡體   English   中英

如何清理Java流?

[英]How can I clean up my Java Streams?

我和其他很多人一樣,在這里,我濫用了大量的電話來完成工作。 利用J8時好像是反模式。

+    Arrays.stream(resources)
+        .map(this::ingestFromFile)
+        .collect(Collectors.toList())
+        .stream()
+        .map(Container.class::cast)
+        .map(Container::getAll)
+        .flatMap(Collection::stream)
+        .collect(Collectors.toList())
+        .forEach(
+            dataType -> {
+              loaderConstants.getRepo(dataType.toString()).save(dataType);
+              LOGGER.log(Level.INFO, "Saved: " + dataType);
+            });

我如何縮短時間,為避免此類發展,我將來應該注意哪些陷阱?

好吧,您不需要中間的.collect(Collectors.toList())調用,因為這是不必要的,並且可以避免可避免的開銷。

Arrays.stream(resources)
     .map(this::ingestFromFile)
     .map(Container.class::cast)
     .map(Container::getAll)
     .flatMap(Collection::stream)
     .forEach(
            dataType -> {
              loaderConstants.getRepo(dataType.toString()).save(dataType);
              LOGGER.log(Level.INFO, "Saved: " + dataType);
     });

然后,您可以將forEach的主體提取為簡化管道的方法。

我叫安迪(Andy),我不喜歡串流。

這段代碼很好地說明了為什么。 (好的,它們有時會有所幫助;但實際上僅在非常簡單的情況下)。

您(很希望)在編程的早期就學到了一件事,即身份使代碼易於閱讀:它可以幫助您了解相關值發生的事情。

在流式代碼中,縮進直接顯示在窗口之外。 左邊距是筆直的-查看所有期間如何排列:

+    Arrays.stream(resources)
+        .map(this::ingestFromFile)
+        .collect(Collectors.toList())
+        .stream()
+        .map(Container.class::cast)
+        .map(Container::getAll)
+        .flatMap(Collection::stream)
+        .collect(Collectors.toList())
+        .forEach(
+            dataType -> {
+              loaderConstants.getRepo(dataType.toString()).save(dataType);
+              LOGGER.log(Level.INFO, "Saved: " + dataType);
+            });

只是沒有視覺結構。

尤其是在使用forEach ,使用循環會更容易。

for (var resource : resources) {
  var fromFile = resource.ingestFromFile();
  var container = (Container) fromFile;
  for (var dataType : container.getAll()) {
    loaderConstants.getRepo(dataType.toString()).save(dataType);
    LOGGER.log(Level.INFO, "Saved: " + dataType);
  }
}

(您可能沒有使用Java 10;但是我還是不知道數據類型。如果需要,請填寫類型而不是var )。

就個人而言,我認為這是比較容易的方式閱讀。 而且更短。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM