gpt4 book ai didi

java - 在 Java 中转换泛型 Collection 的类型

转载 作者:行者123 更新时间:2023-11-30 08:12:09 26 4
gpt4 key购买 nike

在我的代码中的几个地方,我希望转换其泛型类型的 ArrayList 和 TreeSet。例如我有一个 ArrayList<Integer>我希望将其转换为 ArrayList<Long> 。或者我有一个TreeSet<BigInteger>我希望将其转换为 TreeSet<String> .

所有这些转换都可以进行,但是我必须为每个类型转换创建一个不同的函数。因此我想创建一个通用函数,其签名如下所示:

public static <Q,T> Collection<Q> convert(Collection<T> col, Class<Q> Q)

我想要的是从 col 获取类(class)(例如 ArrayList ),创建该类的新集合并输入 Q (称为 newCol ),然后迭代 col并转换 T 类型的每个元素输入Q并将其添加到 newCol最后返回newCol .

我该怎么做?

最佳答案

Java 中没有像转换不兼容类这样的特殊机制。您需要指定一个将执行转换的显式函数。使用 Java 8 非常简单:

public static <Q,T,C extends Collection<Q>> C convert(Collection<T> col, Function<T, Q> fn, 
Supplier<C> supplier) {
return col.stream().map(fn).collect(Collectors.toCollection(supplier));
}

像这样使用它:

TreeSet<BigInteger> values = // fill them somehow
TreeSet<String> converted = convert(values, BigInteger::toString, TreeSet::new);

关于java - 在 Java 中转换泛型 Collection 的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30234236/

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