Java 当值位于ArrayList中时,如何继续向已存在的键添加值?输入来自扫描仪以创建树映射

Java 当值位于ArrayList中时,如何继续向已存在的键添加值?输入来自扫描仪以创建树映射,java,list,dictionary,multimap,Java,List,Dictionary,Multimap,我试图从用户那里接收输入,其中每一行必须包含一些文本(一个键),后跟一个制表符,后跟一个doubleliteral(一个值),后跟一个换行符 如果允许用户继续输入相同的键,后跟/t,然后输入不同的值和/n,我如何编写一个程序,将值不断添加到树映射中的相同键 每个键都有一个ArrayList,这就是我被卡住的地方,因为我不知道如何为不同的行/键不断添加到数组列表中 这就是我到目前为止所做的: TreeMap<String, ArrayList<Double>> ca

我试图从用户那里接收输入,其中每一行必须包含一些文本(一个键),后跟一个制表符,后跟一个
double
literal(一个值),后跟一个换行符

如果允许用户继续输入相同的键,后跟
/t
,然后输入不同的值和
/n
,我如何编写一个程序,将值不断添加到树映射中的相同键

每个键都有一个
ArrayList
,这就是我被卡住的地方,因为我不知道如何为不同的行/键不断添加到数组列表中

这就是我到目前为止所做的:

    TreeMap<String, ArrayList<Double>> categoryMap = new TreeMap<>();

    Double val = 0.0;
    String inputKey = "";

    System.out.println("Welcome, please enter text");
    Scanner scn = new Scanner(System.in);
    dataSource = scn;

    try
    {
        // adds all words of input to a string array
        while (dataSource.hasNextLine())
        {
            ArrayList<Double> valueMap = new ArrayList<>();
            inputKey = dataSource.next();

            val = dataSource.nextDouble();
            valueMap.add(val);

            if (categoryMap.get(inputKey) == null)
            {
                categoryMap.put(inputKey, valueMap);
            }
            else
            {
                categoryMap.put(inputKey, valueMap);
            }

            dataSource.nextLine();
        }
    }
    // Exception if no lines detected and shows message
    catch (IllegalArgumentException lineExcpt)
    {
        System.out.println("No lines have been input: " + lineExcpt.getMessage());
    }
    finally
    {
        scn.close();
    }

    return categoryMap;
TreeMap categoryMap=newtreemap();
双val=0.0;
字符串inputKey=“”;
System.out.println(“欢迎,请输入文本”);
扫描仪scn=新扫描仪(System.in);
数据源=scn;
尝试
{
//将所有输入字添加到字符串数组
while(dataSource.hasNextLine())
{
ArrayList valueMap=新的ArrayList();
inputKey=dataSource.next();
val=dataSource.nextDouble();
valueMap.add(val);
if(categoryMap.get(inputKey)==null)
{
categoryMap.put(inputKey,valueMap);
}
其他的
{
categoryMap.put(inputKey,valueMap);
}
dataSource.nextLine();
}
}
//如果未检测到任何行并显示消息,则异常
捕获(IllegalArgumentException lineExcpt)
{
System.out.println(“未输入任何行:”+lineExcpt.getMessage());
}
最后
{
scn.close();
}
返回类别映射;

我对java非常陌生,只有大约一个月的经验。

您应该从映射中获取该键的arraylist并在那里添加值,类似于
categoryMap.get(inputKey)。add(val)
在您的else中,代码可以得到改进,但是我现在正在使用phome…

你应该从映射中获取该键的arraylist并在那里添加值,比如
categoryMap.get(inputKey)。在你的else中添加(val)
,代码可以改进,但我现在正在使用phome…

这是
中的逻辑,而
循环需要一些修改。当前,每次都将使用新的值列表覆盖该值列表

以下是您的书面资料:

  • 如果该键不存在,请使用给定的
    double
    创建一个新列表,并将其用作值
  • 否则,获取(已经存在的)列表并向其中添加
    double
在代码中,我们只需要修改您所做的:

String inputKey = dataSource.next();
double val = dataSource.nextDouble();
List<Double> list = categoryMap.get(inputKey);

if (list == null)                    // If the key does not exist
{
    list  = new ArrayList<>();       // create a new list
    list.add(val);                   // with the given double
    categoryMap.put(inputKey, list); // and use it as the value
}
else                                 // Else
{
    list.add(val)                    // (got the list already) add the double to it
}
String inputKey=dataSource.next();
double val=dataSource.nextDouble();
List List=categoryMap.get(inputKey);
if(list==null)//如果键不存在
{
list=new ArrayList();//创建一个新列表
list.add(val);//使用给定的双精度
categoryMap.put(inputKey,list);//并将其用作值
}
else//else
{
add(val)//(已经得到了列表)将double添加到列表中
}

这是
中的逻辑,而
循环需要一些修改。当前,每次都将使用新的值列表覆盖该值列表

以下是您的书面资料:

  • 如果该键不存在,请使用给定的
    double
    创建一个新列表,并将其用作值
  • 否则,获取(已经存在的)列表并向其中添加
    double
在代码中,我们只需要修改您所做的:

String inputKey = dataSource.next();
double val = dataSource.nextDouble();
List<Double> list = categoryMap.get(inputKey);

if (list == null)                    // If the key does not exist
{
    list  = new ArrayList<>();       // create a new list
    list.add(val);                   // with the given double
    categoryMap.put(inputKey, list); // and use it as the value
}
else                                 // Else
{
    list.add(val)                    // (got the list already) add the double to it
}
String inputKey=dataSource.next();
double val=dataSource.nextDouble();
List List=categoryMap.get(inputKey);
if(list==null)//如果键不存在
{
list=new ArrayList();//创建一个新列表
list.add(val);//使用给定的双精度
categoryMap.put(inputKey,list);//并将其用作值
}
else//else
{
add(val)//(已经得到了列表)将double添加到列表中
}

如果使用Java 8,则地图具有
computeIfAbsent
方法

List<Double> addTo = map.computeIfAbsent(key, ArrayList::new);
List addTo=map.computeIfAbsent(key,ArrayList::new);

如果使用Java 8,则地图具有
computeIfAbsent
方法

List<Double> addTo = map.computeIfAbsent(key, ArrayList::new);
List addTo=map.computeIfAbsent(key,ArrayList::new);

我正试图如上所述获取输入,并将信息放入名为categoryMap的树状图中。我正试图如上所述获取输入,并将信息放入名为categoryMap的树状图中