繁体   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