1.先写个小例子
reduce
println((0..5).reduce { acc, i ->
Log.e("reduce ====","acc:"+acc+" i:" + i)
acc + i
})
// 输出结果:
// E/reduce ====: acc:0 i:1
// E/reduce ====: acc:1 i:2
// E/reduce ====: acc:3 i:3
// E/reduce ====: acc:6 i:4
// E/reduce ====: acc:10 i:5
// I/System.out: 15
fold
println((0..5).fold(1) { acc, i ->
Log.e("fold ====","acc:"+acc+" i:" + i)
acc + i
})
// 输出结果:
// E/fold ====: acc:1 i:0
// E/fold ====: acc:1 i:1
// E/fold ====: acc:2 i:2
// E/fold ====: acc:4 i:3
// E/fold ====: acc:7 i:4
// E/fold ====: acc:11 i:5
// I/System.out: 16
println((0..5).fold(" ") { acc, i ->
acc + i
})
// 输入结果:
// I/System.out: 012345
2.查找区别
看功能fold和reduce是一样的,都是累加器。
不同的是:
1. 参数不同
fold可以设置一个参数,把这个参数当作初始值。从初始值开始累加。
reduce没有初始值
2. 返回类型不同
fold返回类型,是根据参数类型而定。
reduce返回类型,是根据迭代值类型而定。