我正在尝试计算(或列出)来自美国的所有艺术家。如果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/