Java8新特性:reduce方法

更新时间:2023-07-09 23:38:23 阅读: 评论:0

Java8新特性:reduce⽅法
⼀:reduce
rudece⽅法:从⼀个流中⽣成⼀个值
三个重载⽅法:
Optional<T>reduce(BinaryOperator<T> accumulator);
T reduce(T identity, BinaryOperator<T> accumulator);
<U> U reduce(U identity,
BiFunction<U,?super T, U> accumulator,大学英语四级准考证打印
BinaryOperator<U> combiner);
⼆:重载⽅法原理
⼀个参数
接⼝继承详情:
Optional<T>reduce(BinaryOperator<T> accumulator);
@FunctionalInterface
public interface BinaryOperator<T>extends BiFunction<T,T,T>{
//两个静态⽅法,先进⾏忽略
}
@FunctionalInterface
public interface BiFunction<T, U, R>{
邮递员的英文R apply(T t, U u);
//⼀个默认⽅法,先进⾏忽略
}
这⾥可以看出,reduce⽅法参数为⼀个函数,返回值为Optional对象,BinaryOperator的作⽤为规定BiFunction的三个参数泛型类型要⼀致,也就是说只要我们对apply⽅法进⾏实现并传进去就ok了。
⽂档中写到:
Performs a reduction on the elements of this stream, using an associative accumulation function, and returns an Optional describing the reduced value。
⼤致意思:使⽤累积函数对此流的元素执⾏操作,并返回⼀个描述结果的Optional对象。
reduce⽅法的效果:
This is equivalent to:
boolean foundAny =fal;
T result = null;
for(T element :this stream){
if(!foundAny){
foundAny =true;
result = element;
}
el
result = accumulator.apply(result, element);
}
return foundAny ? Optional.of(result): pty();
如上⽂描述:⽤T类型对象对流进⾏遍历,第⼀个数值进⾏赋值,其余apply操作,并将操作的结果进⾏返回,等待下次继续当apply⽅法参数输⼊。
那也就是说,我们可以这样:
求和效果展⽰:
List<Integer> num = Arrays.asList(1,2,4,5,6,7);
信仰的英文
Integer result = num.stream().reduce((x, y)->{
System.out.println("x:"+x);
return x + y;
}).get();
System.out.println("resutl:"+result);
//你也可以这样写,效果⼀样,⼀个为Lambda表达式,⼀个匿名内部类
Integer integer = num.stream().reduce(new BinaryOperator<Integer>(){
@Override
public Integer apply(Integer a, Integer b){
return a + b;
}
}).get();
两个参数
接⼝继承详情:
该⽅法的参数多了⼀个identity,初始值
T reduce(T identity, BinaryOperator<T> accumulator);
哈尔滨雅思培训哪里好⽂档解释:
Performs a reduction on the elements of this stream, using the provided identity value and an associative
accumulation function, and returns the reduced value.
⼤致意思:使⽤提供的初始值和累计函数对流进⾏操作,并返回⼀个初始值类型的计算结果。
T result = identity;
for(T element :this stream){
result = accumulator.apply(result, element)
}
return result;
reduce⽅法效果:使⽤identity作为初始值,每遍历到⼀个数据,⽤apply⽅法操作并将结果返回。
计和效果展⽰:
List<Integer> num = Arrays.asList(1,2,3,4,5,6);
Integer result = num.stream().reduce(0,(x, y)->{
System.out.println("x:"+ x);
return x + y;
});
System.out.println("resutl:"+ result);
英语机构收费标准
不同点:①,reduce中多了⼀个参数,初始值identity。②⽅法的返回结果为初始值identity类型的对象。
三个参数
接⼝继承详情:
<U> U reduce(U identity,
山东大学自考招生BiFunction<U,?super T, U> accumulator,
BinaryOperator<U> combiner);
@FunctionalInterface
public interface BiFunction<T, U, R>{
R apply(T t, U u);
//⼀个默认⽅法,忽略
}
这⾥先看⼀个reduce的参数:①,U类型的初始值。②,(T,U)→U,T+U返回U类型。③组合器,(T,T)→T,T+T返回T类型。
⽂档描述:
这个是对于combiner组合器的描述,其他描述和前两个⽅法⽆⼆。
The identity value must be an identity for the combiner function.his means that for all u, combiner(identity, u) is equal to code u. Additionally, the code combiner function must be compatible with thecode accumulator function; for all u and t。
⼤致意思:组合器需要和累加器的返回类型需要进⾏兼容,combiner组合器的⽅法主要⽤在并⾏操作中。
reduce⽅法运⾏效果:
U result = identity;
for(T element :this stream){
result = accumulator.apply(result, element)
}
return result;
与前两个⽅法的不同点:
主要是初始值与⽤于遍历流的对象类型不同,可以进⾏许多骚操作,例如ArrayList内添加数据,StringBulider拼接数据。
⾮并⾏:向ArrayList添加数据:
向arr集合后⾯添加num集合的数值,由于是⾮并⾏操作,combiner组合器⽅法没有效果,只要参数与返回类型正确即可。
List<Integer> num = Arrays.asList(1,2,3,4,5,6);
ArrayList<Integer> arr =new ArrayList<>();
arr.add(7);
arr.add(8);
arr.add(9);
arr.add(10);
List<Integer> reduce = num.stream().reduce(arr,(x, y)->{
x.add(y);
return x;
怎样化妆使眼睛变大},(List<Integer> x, List<Integer> y)->{
System.out.println("并⾏才会出现");
return x;
});decimalpoint
System.out.println(reduce);
并⾏:集合内数据求和:
List<Integer> num = Arrays.asList(1,2,3,4,5,6);
Integer num1 = num.parallelStream().reduce(7,(x, y)-> x + y,(x, y)->{
雅思口语考试流程System.out.println("这⾥调⽤⼀次");
return x + y;
完美的英文});
System.out.println(num1);
预算结果应该为1+…+7=28,然⽽结果为67,那这⾥应该是这样的,调⽤6个线程进⾏计算,每个线程都以7作为初始值进⾏计算,最后将每个线程进⾏累计操作。combiner组合器的作⽤应该⼤致为将每个线程所计算的结果进⾏组合。

本文发布于:2023-07-09 23:38:23,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/1088160.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:类型   返回   操作   结果   数据   组合
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图