对层次结构对象的Java lambda操作

时间:2014-08-19 07:43:40

标签: java lambda

我试图统计(或列出)所有来自美国的艺术家。如果Artist对象是独奏,那么它是可以直接计数的人。如果它不是独奏,那么它是一个由艺术家/成员组成的乐队。我们需要统计成员。

我目前的代码如下:

    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,但目前还没有任何线索。

1 个答案:

答案 0 :(得分:2)

怎么样:

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