【问题标题】:conversion of string arraylist to double arraylist using lambdas使用 lambda 将字符串数组列表转换为双数组列表
【发布时间】:2016-02-09 14:52:32
【问题描述】:

到目前为止,我需要一些关于使用 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);
}
}

错误: 它有点笨拙,这里完整

线程“main”中的异常 java.lang.NullPointerException 在 sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1838) 在 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-sn-ps\run.xml:53:Java 返回:1 构建失败(总时间:2 秒)

【问题讨论】:

  • “谁能告诉我我哪里出错了”——好吧,你还没有告诉我发生了什么,这很难帮助你。请发帖minimal reproducible example
  • 当我使用整数而不是双精度时它运行良好,唯一的问题是双精度和文件只包含一列数据。
  • buff 包含空值,除非行数刚好合适。不用数组,只用ArrayList&lt;String&gt;存储s

标签: java string arraylist lambda double


【解决方案1】:

同意@bayou.io,使用ArrayList&lt;String&gt; 代替buff[]

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

或在字符串到双精度转换之前放置null 检查,例如

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

【讨论】:

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

    感谢您的帖子解决了

    【讨论】:

      猜你喜欢
      • 2014-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-14
      • 2022-07-26
      相关资源
      最近更新 更多