gpt4 book ai didi

Java 8 Stream.collect() 的一般使用

转载 作者:行者123 更新时间:2023-11-30 06:11:01 27 4
gpt4 key购买 nike

首先我承认删除可能会使这成为不可能。这是我正在尝试做的,但没有用:

import java.util.*;
import java.util.function.*;
import java.util.stream.*;

public class Suppliers {
public static <CollectionType, T> CollectionType<T>
fill(CollectionType colltype, Supplier<T> gen, int n) {
return Stream.generate(gen)
.limit(n)
.collect(colltype::new, colltype::add, colltype::addAll);
}
}

目标是生成一个 CollectionType 实例,并使用 genn 项填充它。这种形式的 collect() 确实实例化了一个新集合,但我不清楚该类型是否可以通过 fill() 的参数列表传递。 fill() 方法不必看起来完全是这样,只要它实例化一个新集合并填充它并返回结果即可。

最佳答案

你的想法是对的,但你想要的是:

<T, C extends Collection<T>> C fill(Supplier<T> gen, 
int n,
Supplier<C> factory) {
return Stream.generate(gen)
.limit(n)
.collect(factory, C::add, C::addAll);
}

然后你可以调用它:

HashSet<String> strings = fill(() -> "Foo", 10, HashSet::new);

此技术用于方法,例如 Collectors.toMap() 的 4-arg 版本。

关于Java 8 Stream.collect() 的一般使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34801965/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com