我有一个 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/