如何将收藏<Number>转换为收藏<Integer>安全?



我有Collection<Number>,但我需要Collection<Integer>

如何将其转换为安全?

还有更常见的问题:

如何将Collection<Parent>转换为Collection<Child>

你可以

试试这个

    Collection<Number> numbers = ...
    Collection<Integer> integers = numbers.getClass().newInstance();
    for(Number n : numbers) {
        integers.add(n == null ? null : n.intValue());
    }

番石榴的例子:

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();
  }
});

注意:番石榴是一个外部库,您需要导入它。

你可以

用这样的转换方法做到这一点 -

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;
}
您可以使用

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 );
       }
  }

对于每个循环,以迭代具有任何数值数据类型的集合,然后单独插入将这些数值数据类型转换为整数 1 到另一个集合。

List<Integer> i =  new ArrayList<Integer>();
for (Number n : in){
i.add(n.intValue()); 
}}

最新更新