java - 如何从文本文件中填充 Map<String, List<String>>? -难以动态命名每个列表

标签 java list hashmap

这是文本文件。 K:代表一个键,V:代表我要输入的列表中的值。 ie : Strawberry , Apricot 和 Peach 组成了 map 关键类 A 的列表。

K: Class A//
V: Strawberry//
V: Apricot//
V: Peach//
K: Class B//
V: Chocolate//
K: Class C//
V: Creme de menthe//
V: Irish coffee//

此处的程序正确分配了键,但将文件中的每个值都添加到列表中,而不仅仅是我想要的值。

//FillHM.java 

import java.io.*;
import java.util.Scanner;
import java.util.*;          

public class FillHM  {

   public static void main (String[] args)  {
     Map<String, List<String>> map = new HashMap<String, List<String>>();
     Scanner sc1 = null;

     try  {  
        sc1 = new Scanner(new File("/home/craig/Desktop/mytext.txt"));
     }catch (FileNotFoundException e) {e.printStackTrace();}

     List<String>values = new ArrayList<>();
     String s = " ";
     String key = " ";

     while (sc1.hasNextLine())  {
            Scanner sc2 = new Scanner(sc1.nextLine());
            sc2.useDelimiter("//");

            while(sc2.hasNext())  {
                s = sc2.next();      
                if  (s.startsWith("K:"))  {
                    key = s;
                }       
                if (s.startsWith("V:"))  {
                    values.add(s);   
                }
                map.put(key, values);
            } //end while
     }  //end while 
     System.out.println(map);
  }
}

最佳答案

当您检测到新 key 时,创建一个新列表:

if (s.startsWith("K:"))  {
    key = s;
    values = new ArrayList<>();
}

如果您不这样做,每个键都将映射到相同 列表。您希望每个键都映射到它自己的列表。

关于java - 如何从文本文件中填充 Map<String, List<String>>? -难以动态命名每个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26072242/

相关文章:

android - 为什么我的 HTML 列表在 WebView 中移出了屏幕?

java - 计算余弦相似度

java - 设置以 MediaPlayer 流为声源的 Android 闹钟

java - 列出 map 中的值

java - 如何从 .t​​xt 文件中读取字符串并根据出现次数将它们排序到 ArrayList 中?

java - 在忽略字段的列表中查找重复项

java - 具有嵌套 ArrayList 的对象的线程安全 HashMap

java - 由于 NullPointerException : Attempt to invoke virtual method HashMap on a null object reference 无法启动 Activity

java - 从 java 接口(interface)上的接口(interface)调用另一个接口(interface)方法是不好的做法吗?

java - 在java中合并多个csv文件