层次结构对象上的 Java lambda 运算

标签 java lambda

我正在尝试计算(或列出)来自美国的所有艺术家。如果Artist对象是solo,那么可以直接计数的是person。如果不是独奏,那么它就是由艺术家/成员组成的乐队。我们需要计算成员的数量。

我当前的代码如下:

    long count = allArtists.stream()
              .filter(artist -> artist.isFrom("US") && artist.isSolo())
              .count();
    long count2 = allArtists.stream()
            .filter(artist -> artist.isFrom("US") && !artist.isSolo())
            .flatMap(artist -> artist.getMembersAsStream())
            .count();
    long result = count + count2;

当代码运行时,我注意到它在过滤 allArtists 时执行了两个重复操作,这可能会损害性能。如何改进 lambda 表达式?我正在考虑使用partitionBy,但目前没有任何线索。

最佳答案

怎么样:

long result = allArtists.stream()
          .filter(artist -> artist.isFrom("US"))
          .flatMap(artist -> artist.isSolo() ? Stream.of(artist)
                                             : artist.getMembersAsStream())
          .count();

关于层次结构对象上的 Java lambda 运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25378094/

相关文章:

java - 如何在java中编写自定义函数/方法? (RFT)

java - Android 应用程序中的周期性操作

java - org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException

java - 从代码更改 Tomcat Webapp 目录

java - 我可以访问流链中先前 lambda 的值吗?

c++ - 如何在不捕获变量的情况下对 lambda 中的变量使用 decltype?

java - 如何启用禁用的 JRadioButton

c# - 从反射转向表达式树

Qt C++11 lambda : Is this connect (signal-slot) correct?

c# - 检索在 Func 中执行的调用方法的名称