为每个订购地图内容的不同实现

时间:2017-03-10 08:32:24

标签: java for-loop

我有一张地图,如下所示。

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中。 它没有按预期添加。 我必须在其中加入排序逻辑。

2 个答案:

答案 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);

感谢所有人的解决方案。