我有Collection<Number>
但我需要Collection<Integer>
如何将其转换为安全?
更常见的问题:
如何将Collection<Parent>
转换为Collection<Child>
答案 0 :(得分:3)
你可以试试这个
Collection<Number> numbers = ...
Collection<Integer> integers = numbers.getClass().newInstance();
for(Number n : numbers) {
integers.add(n == null ? null : n.intValue());
}
答案 1 :(得分:2)
你可以用这种转换方法 -
这样做public static Collection<Integer> convert(Collection<Number> in) {
List<Integer> al = new ArrayList<Integer>();
for (Number n : in) {
if (n != null) {
al.add(n.intValue());
}
}
return al;
}
答案 2 :(得分:2)
Guava示例:
import com.google.common.base.Function;
import com.google.common.collect.Collections2;
Collection<Number> collection = ...
return Collections2.transform(collection, new Function<Number, Integer>() {
@Nullable
@Override
public Integer apply(@Nullable Number input) {
if(input == null) {
return null;
}
return input.intValue();
}
});
注意:Guava是一个外部库,您需要将其导入。
答案 3 :(得分:1)
您可以使用instanceof
运营商。试试这个
Iterator<Number> itr = collection.iterator();
while(itr.hasNext())
{
Number number = itr.next();
if(number instanceof Integer)
{
Integer value = (Integer)number ;
System.out.print("Integer is "+value );
}
}
答案 4 :(得分:0)
对于每个循环来迭代具有任何数字数据类型的集合,然后单独插入将这些数字数据类型转换为整数到另一个集合。
List<Integer> i = new ArrayList<Integer>();
for (Number n : in){
i.add(n.intValue());
}}