一、==与equal()的区别
- == 比较
值
是否相等,equal比较是否是同一个对象
1. ==
1.1 作用于基本数据类型 ,比较其存储的值
1.2 作用于引用数据类型,比较其所指向对象的地址值
2. equal()
2.1 equals是Object的方法,用来比较两个对象的地址值是否相等;不能作用于基本数据类型
2.2 String类型重写了equal():比较的是对象值;没有对 equals 方法进行重写,则相当于“==“,比较的是对象的地址值
'=='是判断两个变量或实例是不是指向同一个内存空间。'equals’是判断两个变量或实例所指向的内存空间的值是不是相同
参考博客1
参考博客2
二、stream.reduce()
reduce的作用是把stream中的元素给组合起来,我们可以传入一个初始值,它会按照我们的计算方式依次拿流中的元素和初始化值进行计算,计算结果再和后面的元素计算
Ⅰ,一个参数使用
Stream<Integer> integerStream =Stream.iterate(1,(a)->a+2).limit(5);// 1 3 5 7 9
System.out.println(integerStream);
System.out.println(integerStream.reduce((a,b)->{
System.out.println("a:"+a); // 1 4 9 16
System.out.println("b:"+b);
return a+b;
}));
第一次计算使用前两个参数,后面以上一次计算的返回值作为第一个参数,流中取下一个值作为第二个参数
Ⅱ,两个参数使用(带初始值)
// 两个参数使用,带初始值
List<Integer> list1 = Arrays.asList(1,2,3,4,5,6,7);
Integer sum = list1.stream().reduce(10,(a,b)->a+b);
System.out.println(sum); //38
Ⅲ,三个参数使用(带初始值,并行计算,改变返回值类型)