我有一张地图,如下所示。
Map<String, List<String>> fileMap = th.getFileTranslateWordMap();
键的类型为String,而值的类型为list。
地图可能包含任意数量的此类键值对。
我在每个循环中使用a来显示键和值对。
输出如下所示: -
Set2.txt/[binnikemask, vågat, cognac]
Set1.txt/[tuffing, attityd, underskott]
Set3.txt/[rseelse, spjäla, ljud]
这里Set2.txt,Set1.txt和Set3.txt是键,而方括号中的任何内容都是值。
我需要获取第一个键(Set2.txt)的第一个值(binnikemask),然后获取第二个键Set1.txt的第一个值(tuffing) 然后是第三个键Set3.txt的第一个值(rseelse)
既然我有3个值,我应该对它们进行排序并存储在arraylist中。
然后我需要去第一个键的第二个值,然后是第二个键的第二个值,接着是第三个键的第三个值。 对它进行排序并存储在相同的arraylist中。
我应该继续重复这个程序,直到我完成所有的话。
我使用的是Java 8。
Map<String, List<String>> fileMap = th.getFileTranslateWordMap();
ArrayList<String> arrlist = new ArrayList<String>();
for (Entry<String, List<String>> entry : fileMap.entrySet()) {
System.out.println(entry.getKey() + "/" + entry.getValue());
arrlist.addAll(entry.getValue());
}
System.out.println(arrlist);
上面的代码nippet将所有键的所有值添加到arraylist中。 它没有按预期添加。 我必须在其中加入排序逻辑。
答案 0 :(得分:1)
假设所有列表都包含3个值,可以使用Java 8 Streams API轻松解决:
Map<String, List<String>> fileMap = new HashMap<>();
fileMap.put("Set1.txt", Arrays.asList("tuffing", "attityd", "underskott"));
fileMap.put("Set2.txt", Arrays.asList("binnikemask", "vågat", "cognac"));
fileMap.put("Set3.txt", Arrays.asList("rseelse", "spjäla", "ljud"));
List<String> values = IntStream.range(0, 3)
.<Stream<String>>mapToObj(index ->
fileMap.values().stream().map(list -> list.get(index)))
.flatMap(Function.identity())
.collect(Collectors.toList());
System.out.println(values);
此代码将输出以下行:
[binnikemask, tuffing, rseelse, vågat, attityd, spjäla, cognac, underskott, ljud]
如果您需要单独对每个三元组中的值进行排序,可以在正确的位置添加.sorted()
,例如fileMap.values().stream().map(list -> list.get(index)).sorted())
然后您的输出将是:
[binnikemask, rseelse, tuffing, attityd, spjäla, vågat, cognac, ljud, underskott]
答案 1 :(得分:0)
终于明白了。谢谢@Markus!没有你的逻辑,就不可能。 我根据需要修改了Markus的解决方案如下: -
List<String> values = IntStream.range(0, 50)
.<Stream<String>>mapToObj(index ->
fileMap.values().stream().map(list -> list.get(index)).sorted())
.flatMap(Function.identity())
.collect(Collectors.toList());
System.out.println(values);
感谢所有人的解决方案。