有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将Scanner转换为两个ArrayList,一个带有double,另一个带有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);
}

最终目标是将"String Double"格式的值列表转换为TreeMap<String, ArrayList<Double>> map = new TreeMap<>();格式的树映射

我一直在写一个循环来分离这两种对象类型


共 (2) 个答案

  1. # 1 楼答案

    试试这个:

    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);
       }
    
    }
    
  2. # 2 楼答案

    假设值列表用于重复项,为什么不直接写入映射

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