【问题标题】:How to convert Collection<Number> to Collection<Integer> safety?如何将 Collection<Number> 转换为 Collection<Integer> 安全?
【发布时间】:2014-01-12 12:43:36
【问题描述】:

我有Collection&lt;Number&gt;,但我需要Collection&lt;Integer&gt;

我怎样才能安全地转换它?

还有更常见的问题:

如何将Collection&lt;Parent&gt; 转换为Collection&lt;Child&gt;

【问题讨论】:

  • foreach 循环或 Guava Collections2.transform(collection, function)
  • ... 或开始使用 Java 8 Early Access :) in.stream().map(n-&gt;n.intValue()).collect(intoList());
  • Arnaud Denoyelle 我需要在函数中写什么?
  • @gstackoverflow 你需要一个 Guava 函数:docs.guava-libraries.googlecode.com/git/javadoc/com/google/…
  • Arnaud Denoyelle,如果你写代码示例我会很高兴的。

标签: java collections numbers integer


【解决方案1】:

你可以试试这个

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

【讨论】:

    【解决方案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】:

      你可以用这种转换方法来做到这一点 -

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-05-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-12-19
            相关资源
            最近更新 更多