如何从分组到 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]}
我写了一个程序,从文件夹中读取多个(相似的)文本文件。我按 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]}