嵌套list求和,如题
记录一下,搞了半天,积累一下,后续写stream整套的文章
for循环解决
int sum = 0;
for (EntityA entityA : list) {
for (EntityB entityB : entityA.getEntityBList()) {
sum += entityB.getCount();
}
}
用stream流解决
int res = list.stream().map(EntityA::getEntityBList)
.map(item -> item.stream().map(EntityB::getCount).reduce(0, Integer::sum))
.reduce(0, Integer::sum);
不过,对于性能有待考究,我觉的流应该比for循环要快,但是相比较速度更慢,我还是觉得有些奇怪
我的测试数据如下:
数据量 | 使用for循环解决的时间 | 使用stream流解决的时间 |
---|---|---|
10 | 1ms | 80ms |
100 | 1ms | 85ms |
1000 | 3ms | 84ms |
10000 | 10ms | 94ms |
100_000 | 25ms | 122ms |
1_000_000 | 125ms | 413ms |
10_000_000 | 1133ms | 3164ms |