我试图统计(或列出)所有来自美国的艺术家。如果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,但目前还没有任何线索。
答案 0 :(得分:2)
怎么样:
long result = allArtists.stream()
.filter(artist -> artist.isFrom("US"))
.flatMap(artist -> artist.isSolo() ? Stream.of(artist)
: artist.getMembersAsStream())
.count();