作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的代码中的几个地方,我希望转换其泛型类型的 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/
我是一名优秀的程序员,十分优秀!