sách gpt4 ăn đã đi

java - Java 8 中函数类型全等 lambda 表达式的使用

In lại 作者:搜寻专家 更新时间:2023-10-30 21:44:30 26 4
mua khóa gpt4 giày nike

我对

的定义和用法感到困惑
Stream.collect(Supplier supplier, BiConsumer accumulator, BiConsumer combiner)

phương pháp在 Java 8 中。

方法签名包括BiConsumer键入的参数。 BiConsumer FunctionalInterface 定义了一种功能方法 accept(Object, Object) .据我了解,我现在可以使用任何 lambda 表达式,即 congruent到这个功能接口(interface)。

但是Stream.collect中提到的例子JavaDocVí dụ

 List asList = stringStream.collect(ArrayList::new, ArrayList::add, ArrayList::addAll);

我不明白为什么ArrayList.add(E e) (单个参数)与 BiConsumer.accept(T t, U u) 一致方法(两个参数),可用作 collect 方法中的累加器函数。

如您所见,我显然缺乏理解并感谢任何解释。

câu trả lời hay nhất

累加器 BiConsumer 的两个参数是 (1) 列表本身和 (2) 要添加到列表中的项目。这:

List asList = stringStream.collect(
ArrayList::new,
ArrayList::add,
ArrayList::addAll
);

等同于:

List asList = stringStream.collect(
() -> new ArrayList<>(),
(list, item) -> list.add(item),
(list1, list2) -> list1.addAll(list2)
);

这将给出与此相同的结果:

List asList = stringStream.collect(
new Supplier<>>() {
@Ghi đè
public ArrayList get() {
return new ArrayList<>();
}
},

new BiConsumer<>,String>() {
@Ghi đè
public void accept(ArrayList list, String item) {
list.add(item);
}
},

new BiConsumer<>,ArrayList>() {
@Ghi đè
public void accept(ArrayList list1, ArrayList list2) {
list1.addAll(list2);
}
}
);

关于java - Java 8 中函数类型全等 lambda 表达式的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26862874/

26 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress