HashSet::add 如何被接受为 ObjectIntConsumer?
How can HashSet::add be accepted as an ObjectIntConsumer?
似乎下一行是在 Java 中收集整数流的有效实现:
IntStream.range(1, 100)
.collect(HashSet::new, HashSet::add, HashSet::addAll);
但是当我考虑到 IntStream class 中的 collect 方法签名时
collect(Supplier<R> supplier,
ObjIntConsumer<R> accumulator,
BiConsumer<R, R> combiner)
,我不明白如何将 HashSet::add 传递给 collect 方法,其中需要 ObjIntConsumer,因为 ObjIntConsumer 需要两个参数
void accept(T t, int value);
,但是 HashSet::add 只接受一个参数!
您的代码中 HashSet::add
的等效 lambda 表达式是:
(HashSet<Integer> t, int value) -> t.add(value)
换句话说,ObjIntConsumer
正在接受容器(在本例中为 HashSet
)和要添加到该容器的值。
似乎下一行是在 Java 中收集整数流的有效实现:
IntStream.range(1, 100)
.collect(HashSet::new, HashSet::add, HashSet::addAll);
但是当我考虑到 IntStream class 中的 collect 方法签名时
collect(Supplier<R> supplier,
ObjIntConsumer<R> accumulator,
BiConsumer<R, R> combiner)
,我不明白如何将 HashSet::add 传递给 collect 方法,其中需要 ObjIntConsumer,因为 ObjIntConsumer 需要两个参数
void accept(T t, int value);
,但是 HashSet::add 只接受一个参数!
您的代码中 HashSet::add
的等效 lambda 表达式是:
(HashSet<Integer> t, int value) -> t.add(value)
换句话说,ObjIntConsumer
正在接受容器(在本例中为 HashSet
)和要添加到该容器的值。