java8中stream().collect(Supplier<R> supplier, BiConsumer<R, ? super T> accumulator)说明
Posted Leo Han
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java8中stream().collect(Supplier<R> supplier, BiConsumer<R, ? super T> accumulator)说明相关的知识,希望对你有一定的参考价值。
java8中提供了Lambda表达式,常用的操作如下:
list.stream().collect()来进行操作,collect中传入的参数如下:
<R> R collect(Supplier<R> supplier,
BiConsumer<R, ? super T> accumulator,
BiConsumer<R, R> combiner);
Supplier 提供容器,供后续accumulator
和combiner
使用
public interface Supplier<T> {
T get();
}
Supplier
只有一个方法,get
返回一个容器,accumulator和combiner方法都会传入
accumulator 处理Supplier提供的T容器和stream中的元素U
@FunctionalInterface
public interface BiConsumer<T, U> {
void accept(T t, U u);
default BiConsumer<T, U> andThen(BiConsumer<? super T, ? super U> after) {
Objects.requireNonNull(after);
return (l, r) -> {
accept(l, r);
after.accept(l, r);
};
}
}
accumulator 中的accept的方法接收两个参数,Supplier提供的容器T以及stream中的元素U,在accept方法中对其进行处理,常见的比如:T是一个ArrayList 将U类型元素添加到list中
combiner 用来将所有accumulator处理后的结果T进行处理
如果是多线程处理情况下,每个线程都会有一个supplier,最后需要将这些结果合并。
常见用法:
- 实现类实现
List<JSONObject> jsons = data.stream().collect(
new Supplier<List<JSONObject>>() {
@Override
public List<JSONObject> get() {
return new ArrayList<>();
}
},
new BiConsumer<List<JSONObject>, DisplayNetworkDto>() {
@Override
public void accept(List<JSONObject> jsonObjects, DisplayNetworkDto dto) {
JSONObject json = new JSONObject();
json.put("id",dto.getAd_id());
json.put("city",dto.getCity());
jsonObjects.add(json);
}
},
new BiConsumer<List<JSONObject>, List<JSONObject>>() {
@Override
public void accept(List<JSONObject> jsonObjects, List<JSONObject> jsonObjects2) {
jsonObjects.addAll(jsonObjects2);
}
}
);
- lambda表达式实现:
List<JSONObject> jsons = data.stream().collect(
()->{return new ArrayList<>();},
(list,dto)->{
JSONObject json = new JSONObject();
json.put("id",dto.getAd_id());
json.put("city",dto.getCity());
list.add(json);
},
(list,list2)->{
list.addAll(list2);
}
);
- 方法引用实现:
List<JSONObject> jsons = data.stream().collect(
ArrayList::new,
(list,dto)->{
JSONObject json = new JSONObject();
json.put("id",dto.getAd_id());
json.put("city",dto.getCity());
list.add(json);
},
List::addAll
);
以上是关于java8中stream().collect(Supplier<R> supplier, BiConsumer<R, ? super T> accumulator)说明的主要内容,如果未能解决你的问题,请参考以下文章
通俗易懂,java8 .stream().map().collect()用法
通俗易懂,java8 .stream().map().collect()用法
标准 Kotlin 库中都有哪些 Java 8 Stream.collect 等效项?
Java8,stream().map().collect(Collectors.toList()).forEach()和stream().map().forEach()有什么区别?
java8中stream().collect(Supplier<R> supplier, BiConsumer<R, ? super T> accumulator)说明