java - 尝试读取 txt 文件并将其存储到多值 HashMap 内的数组列表中

标签 java arraylist hash key

我有一个文本文件,它看起来像这样:

gui awtui   swingui
swingui runner  extensions
textui  runner  framework
awtui   runner
runner  framework
extensions  framework

它们由制表符分隔

我使用 HashMap 来存储这些内容,其中键是第一行,值是该行中的其余字符,例如 键 = gui 值 = atwui swingui

因此,我使用单键、多值 HashMap 来实现此目的,这就是我迄今为止所做的。

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

public class PackageAnalyser {

public static void main(String[] args) throws IOException{
    HashMap<String, List<String>> dependencies = new HashMap<String, List<String>>();
        List<String> pack = new ArrayList<String>();    
        try (Scanner in = new Scanner(new File(args[0]))){
            //String line = null;
            while ((in.hasNext() )){
                String [] packs = in.nextLine().split("\t");
                for (int i = 0; i < packs.length; i++){
                    pack.add(packs[i]);
                    Arrays.sort(packs);
                } 
                dependencies.put(packs[0], pack);
                }

            }catch (IOException ex){
                System.err.println(ex);
            } finally {
        }System.out.println(dependencies);
    }
}

经过多次尝试修改代码,这就是我运行它时的输出

`{awtui = [awtui, swingui, runner, swingui, runner, textui, runner, framework, framework], framework=[awtui, swingui, runner, swingui, textui, runner, framework, framework], extensions=[awtui, swingui, runner, swingui, runner, textui, runner, framework, framework]}

我想要的输出是:

{gui = [awtui, swingui], swingui = [runner, extensions], textui =[runner, framework], awtui = [runner], runner = [framework], extensions = [framework]}

如图所示,我正在从文本文件中读取内容,并且我想显示上面的输出所示的内容。请帮忙。

最佳答案

public class PackageAnalyser {

    public static void main(String[] args) throws IOException {
        HashMap<String, SortedSet<String>> dependencies = new HashMap<String, SortedSet<String>>();

        try (Scanner in = new Scanner(new File(args[0]))) {
            while ((in.hasNext())) {
                String[] packs = in.nextLine().split("\\s");
                String key = packs[0];

                SortedSet<String> deps = dependencies.get(key);
                if (deps == null) {
                    deps = new TreeSet<String>();
                    dependencies.put(key, deps);
                }

                for (int i = 1; i < packs.length; i++) {
                    if (!packs[i].equals("")) {
                        deps.add(packs[i]);                 
                    }
                }                
            }

        } catch (IOException ex) {
            System.err.println(ex);
        } finally {
        }
        System.out.println(dependencies);
    }
}

给出 {extensions=[framework], textui=[framework, runner], gui=[awtui, swingui], swingui=[extensions, runner], awtui=[runner], runner=[framework]}

如果要保留插入顺序,可以使用 LinkedHashMap 而不是普通的 HashMap

关于java - 尝试读取 txt 文件并将其存储到多值 HashMap 内的数组列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37859671/

相关文章:

java - 将日期从 EditText 解析到 Calendar 并从中计算年龄

java - 如何在java中声明匿名数组列表?

C++(Hashmap 风格)数据结构适合这种情况吗?

algorithm - 给定一个对象 A 和一个对象列表 L,如何在不测试所有情况的情况下找出 L 上的哪些对象是 A 的克隆?

java - 为什么会出现 "unreachable code"和 "variable not initialized"编译错误?

java - 无状态 session Bean 中的实例变量 - 状态如何维护?

java - 如何在 servlet 中打开文件?

java - Java 中的 ArrayList 排序

java - 对 ArrayList 中的对象进行排序

c++ - vector<double> 的哈希函数