java - 从数组列表中删除某些值

标签 java csv arraylist

我有一个 csv 文件中的数字列表,我已将其导出到 ArrayList。现在,问题是我的 ArrayList 是 String 而不是 double。我试过使用

ArrayList<Double> arr = new ArrayList<Double>();`

但它给了我一个错误。

我想删除 ArrayList 中小于 0.1 的任何数字。这是我的代码:

public class Example1
{
public static void main(String[] args) throws InvalidFormatException, IOException{
    ArrayList arr=new ArrayList();
File f=new File("C:\\java\\marchcalllast.csv");
Scanner in=new Scanner(f).useDelimiter(",");

while(in.hasNext())
{    
arr.add(in.next());
}


for (int i = 0; i < arr.size(); i++){
  Double item = Double.valueOf(arr.get(i));
  if (item < 0.1) {
    arr.remove(i);
  }
}
System.out.println(arr);

它给我以下错误:

错误:找不到适合 valueOf(java.lang.Object) 的方法 方法 java.lang.Double.valueOf(double) 不适用 (实际参数 java.lang.Object 不能通过方法调用转换为 double) 方法 java.lang.Double.valueOf(java.lang.String) 不适用 (实参java.lang.Object不能通过方法调用转换为java.lang.String)

最佳答案

如果您使用泛型,您的 IDE 会报错,然后您就可以很容易地发现问题所在。当您尝试将元素从 String 解析为 Double 时,它​​们实际上被编译器视为 Object(即使它们实际上是 String),您在这里错过了转换。

这是第一个修复:

public static void main(String[] args) throws IOException {
    List<Double> arr = new ArrayList<Double>();
    File f = new File("C:\\java\\marchcalllast.csv");
    Scanner in = new Scanner(f).useDelimiter(",");

    while (in.hasNext()) {
        arr.add(Double.valueOf(in.next()));
    }

    for (Double item : arr) {
        if (item < 0.1) {
            arr.remove(item); // This is not allowed here, you are iterating on arr
        }
    }

    System.out.println(arr);
}

现在,还有另一个错误:您无法在迭代集合时从集合中删除元素。要解决这个问题,例如,您可以使用第二个临时集合:

public static void main(String[] args) throws IOException {
    List<Double> arr = new ArrayList<Double>();
    File f = new File("C:\\java\\marchcalllast.csv");
    Scanner in = new Scanner(f).useDelimiter(",");

    while (in.hasNext()) {
        arr.add(Double.valueOf(in.next()));
    }

    List<Double> toRemove = new ArrayList<Double>();
    for (Double item : arr) {
        if (item < 0.1) {
            toRemove.add(item);
        }
    }
    arr.removeAll(toRemove);

    System.out.println(arr);
}

关于java - 从数组列表中删除某些值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22209551/

相关文章:

java - 是否应该为 if 语句创建变量?

java - 使用 spring 使用内部方法的注释验证数据

java - Eclipse for Java 显示多个错误

javascript - 使用 Highchart 读取 CSV

csv - Jmeter JSR223 Sampler - 无法将数据写入 CSV 文件

Java - ArrayList<Integer>[][] 可能吗?

java - 初始化的ArrayList不显示

Java执行字符串startsWith的最佳方法

Python 列表理解 csv 文件行提取未正确评估

java - 如何在水平 ScrollView 中显示Arraylist项目?