使用lambdas将字符串arraylist转换为double arraylist

时间:2016-02-09 14:52:33

标签: java string arraylist lambda double

我需要一些关于使用java lambdas将字符串数组列表转换为双数组列表的帮助,现在我已经尝试了这些。

List<Double> Doublevalues1 = valueItemsToList.stream().mapToDouble(Double::parseDouble).boxed().collect(Collectors.toList());

这一般

 for(int j = 0; j< valueItemsToList.size();j++)
    {
         Doublevalues1.add(Double.parseDouble(valueItemsToList.get(j)));
         //Doublevalues.add(Double.valueOf(valueItemsToList.get(j)));
    }

任何人都可以告诉我我哪里出错了这不是重复的答案我尝试了所有可能性我已经通过网但但没有一个给了我正确答案很高兴,如果你能帮助。 这是我的完整代码

 public class Stock {
public static void main(String[] args) {
    // TODO code application logic here
    String buff[] = new String[4988];
    int i = 0;
    File file = new File("C:\\Users\\admin\\Desktop\\data.csv");
    try{
        FileInputStream fis = new FileInputStream(file);
        BufferedReader dis = new BufferedReader(new InputStreamReader(fis));
        String s;
        while ((s = dis.readLine()) != null) {
           // System.out.println(s);
            buff[i] = s;
            i++;
          // String[] s1 = s.split(",");
        }
    }
    catch(Exception e)
    {
         System.out.println("error happend at block try at fileinput");
    }
     //converting array string to arraylist
     List<String> valueItemsToList = Arrays.asList(buff);
     //valueItemsToList.forEach(System.out::println);
     List<Double> Doublevalues1 = new ArrayList<Double>();// valueItemsToList.stream().mapToDouble(Double::parseDouble).boxed().collect(Collectors.toList());
    for(int j = 0; j< valueItemsToList.size();j++)
    {
         Doublevalues1.add(Double.parseDouble(valueItemsToList.get(j)));
         //Doublevalues.add(Double.valueOf(valueItemsToList.get(j)));
    }
     Doublevalues1.forEach(System.out::println);
}
}

错误: 它有点笨拙在这里完成

  

线程中的异常&#34; main&#34;显示java.lang.NullPointerException       at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1838)       at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)       在java.lang.Double.parseDouble(Double.java:538)       在stock.Stock.main(Stock.java:53)   C:\ Users \ admin \ AppData \ Local \ NetBeans \ Cache \ 8.1 \ executor-snippets \ run.xml:53:Java返回:1   BUILD FAILED(总时间:2秒)

2 个答案:

答案 0 :(得分:0)

同意@ bayou.io,使用ArrayList<String>代替buff[]

(因为如果输入文件中的行数少于4988,那么你将获得NullPointerExcetion,如果你有更多行,那么你将获得ArrayIndexOutOfBoundsException)

或将null检查在String to Double转换之前,例如

for(int j = 0; j< valueItemsToList.size();j++)
{
    if(valueItemsToList.get(j) != null){ // NULL Check
        Doublevalues1.add(Double.parseDouble(valueItemsToList.get(j)));
        //Doublevalues.add(Double.valueOf(valueItemsToList.get(j)));
    }
}

答案 1 :(得分:0)

List<String> valueItemsToList = Arrays.asList(buff);
     //valueItemsToList.forEach(System.out::println);
     List<Double> Doublevalues1 = new ArrayList<Double>();// valueItemsToList.stream().mapToDouble(Double::parseDouble).boxed().collect(Collectors.toList());
    for(int j = 0; j< valueItemsToList.size();j++)
    {
         Doublevalues1.add(Double.parseDouble(valueItemsToList.get(j)));
         //Doublevalues.add(Double.valueOf(valueItemsToList.get(j)));

    }
     Doublevalues1.forEach(System.out::println);

感谢您的帖子