简体   繁体   English

将 Scanner 转换为两个 ArrayList,一个带有 Doubles,一个带有 String

[英]Converting Scanner to two ArrayLists, one with of Doubles and one of String

String dataSourceString = "String  43\n String1   50\n String2   45";
Scanner dataSource = new Scanner(dataSourceString);
ArrayList<String> scanString = new ArrayList<String>();
ArrayList<Double> scanDoubleValue = new ArrayList<Double>();
while(dataSource.hasNextLine()) {
    scanString.add(dataSource.next());
    String stringToDouble = dataSource.next();
    Double doubleValue = stringToDouble.parseDouble();
    scanDoubleValue.add(doubleValue);
}

The ultimate goal is to convert a list of values of format "String Double" to a treemap of TreeMap<String, ArrayList<Double>> map = new TreeMap<>();最终目标是将格式为"String Double"的值列表转换为TreeMap<String, ArrayList<Double>> map = new TreeMap<>();

I'm getting stuck on writing a loop to separate the two object types.我一直在编写一个循环来分隔两种 object 类型。

Why not write directly into a map, assuming value list is for duplicates为什么不直接写入 map,假设值列表是重复的

String dataSourceString = "String  43\n String1   50\n String2   45";
Scanner dataSource = new Scanner(dataSourceString);
ArrayList < String > scanString = new ArrayList < String > ();
ArrayList < Double > scanDoubleValue = new ArrayList < Double > ();
Map < String, List < Double >> map = new TreeMap <> ();
while (dataSource.hasNextLine()) {
    String key = dataSource.next();
    Double value = Double.parseDouble(dataSource.next());
    if (map.containsKey(key)) {
        map.get(key).add(value);
    } else {
        List < Double > valueList = new ArrayList();
        valueList.add(value);
        map.put(key, valueList);
    }

}

Try this:尝试这个:

import java.util.*;
import java.util.List;
import java.lang.Double;

public class DeleteFromList {

   public static void main(String[] args) {

   String dataSourceString = "String  43\n String1   50\n String2   45";
      Scanner dataSource = new Scanner(dataSourceString);
      ArrayList<String> scanString = new ArrayList<String>();
      ArrayList<Double> scanDoubleValue = new ArrayList<Double>();
      while(dataSource.hasNextLine()) {
          scanString.add(dataSource.next());
          String stringToDouble = dataSource.next();
          //your line hase the following and I changed it
          //Double doubleValue = stringToDouble.parseDouble();
          Double doubleValue = Double.parseDouble(stringToDouble);
          scanDoubleValue.add(doubleValue);
      }
      System.out.println(scanString);
      System.out.println(scanDoubleValue);
   }

}

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

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