java当值位于ArrayList中时,如何继续向已经存在的键添加值?输入来自扫描仪以创建树状图
我试图接收来自用户的输入,其中每一行必须包含一些文本(一个键),后跟一个制表符,后跟一个double
文本(一个值),后跟一个换行符
如果允许用户继续输入同一个键,然后输入/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;
我对java非常陌生,只有大约一个月的经验
# 1 楼答案
这是
while
循环中的逻辑,需要进行一些修改。当前,每次都会用一个新的值列表覆盖该值列表以下是你在纸上看到的:
double
创建一个新列表,并将其用作值李>double
添加到其中李>在代码中,我们只需要修改您所做的:
# 2 楼答案
如果您使用Java 8,则映射有
computeIfAbsent
方法