繁体   English   中英

将双精度数组列表转换为整数ArrayList

[英]Cast an Arraylist of Doubles to ArrayList of Integers

我正在尝试将ArrayList转换为ArrayList。 我实际上在Double中有一个标签列表,我想创建一个Integers列表。 我试图将一个添加到另一个,但是我当然需要一个铸造过程。

ArrayList<Integer> lab = new ArrayList<Integer>();
lab.addAll(labels.data); //labels.data is an Arraylist of Doubles.

如何将一个列表投射到另一个列表? 我已经尝试过将其一一添加:

ArrayList<Integer> lab = new ArrayList<Integer>();

     for (int i = 0; i < labels.data.size(); i++) {

            lab.set(i, labels.data.get(i).intValue());

    }

但是我收到了outOfBoundsError。

首先,是否特别需要将其作为ArrayList或将其作为包装器类而不是基元? 如果不是这样,使用简单的数组将避免装箱和拆箱以及存储大量对象的开销。

除此之外,您可能希望遍历列表并将每个项目转换为double(或Double),然后将其添加到新数组(或ArrayList)中。 对此没有批量操作。

您不能直接将List<Double>转换为List<Integer> 在每个Double对象上循环并调用intValue()函数以获取它的整数部分。 例如13.3将给13。我希望这就是您想要的。

for(Double d : labels.data){
    lab.add(d.intValue());
}

使用Arraylist<Number> NumberDoubleInteger的父级,因此您可以将Doubles添加到列表中,并且Number.intValue()会在需要时将(自动装箱)转换为Integer。

  ArrayList<Number> list;

  list.add(new Double(17.7));
  Integer i = list.get(0).intValue(); // 18, rounding.

因为使用set()而不是add(),所以您得到outOfBoundsError。 set()是替换命令,并且要求该位置已经有一个对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM