如何从分组到 Java 中的其他列表中的 arraylist 中获取某些信息

How to get certain information out of arraylist grouped into other lists in Java

我写了一个程序,从文件夹中读取多个(相似的)文本文件。我按 space 拆分信息并将所有内容存储在一个数组列表中,其中包含以下数据类型:

key1=hello
key2=good
key3=1234
...
key15=repetition
key1=morning
key2=night
key3=5678
...

现在我正在寻找一种方法来从该列表中获取这些信息,并以某种方式将它们的键分组到其他列表中。所以我正在寻找一种方法来获得这样的结果:

keyList1 = {hello,morning}
keyList2 = {good,night}

等等。

所以我必须检查每一行是否有关键字,例如 "key1" 并将值拆分为“=”并继续下去。

我认为,最适合您(描述的)需求的数据结构是 MultiMap。它就像一张地图,但可以为一个键存储多个值。

例如来自guava项目的实现。

http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Multimap.html

首先,您必须遍历数组列表:

    final Multimap<String, String> multimap = ArrayListMultimap.create();

    for ( String element : arrayList ) {
        String[] splitted = element.split( "=" );
        multimap.put( splitted[0], splitted[1] );
    }

您可以通过以下方式获得值列表:

    for (String key : multimap.keySet()) {
      List<String> values = multimap.get(key);
    }

您可能想要为字符串的拆分添加一些健全性检查。

(代码未经测试)

看起来您可能正在寻找类似的分组(假设您可以访问 Java 8)

List<String> pairs = Files.readAllLines(Paths.get("input.txt"));
Map<String, List<String>> map = pairs
        .stream()
        .map(s -> s.split("="))
        .collect(
                Collectors.groupingBy(
                        arr -> arr[0],
                        LinkedHashMap::new,//to preserve order of keys
                        Collectors.mapping(arr -> arr[1],
                                Collectors.toList())));
System.out.println(pairs);
System.out.println("---");

System.out.println(map);

输出:

[key1=hello, key2=good, key3=1234, key15=repetition, key1=morning, key2=night, key3=5678]
---
{key1=[hello, morning], key2=[good, night], key3=[1234, 5678], key15=[repetition]}