Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不同的实现可为每个用户订购一个地图内容_Java_For Loop - Fatal编程技术网

Java 不同的实现可为每个用户订购一个地图内容

Java 不同的实现可为每个用户订购一个地图内容,java,for-loop,Java,For Loop,我有一张如下图所示的地图 Map<String, List<String>> fileMap = th.getFileTranslateWordMap(); 这里Set2.txt、Set1.txt和Set3.txt是键,而方括号中包含的内容是值 我需要先获取第一个key Set2.txt的第一个值binnikemask,然后获取第二个key Set1.txt的第一个值tuffing 后跟第三个键Set3.txt的第一个值ELSE 既然我有3个值,我应该对它们进行排序并存

我有一张如下图所示的地图

Map<String, List<String>> fileMap = th.getFileTranslateWordMap();
这里Set2.txt、Set1.txt和Set3.txt是键,而方括号中包含的内容是值

我需要先获取第一个key Set2.txt的第一个值binnikemask,然后获取第二个key Set1.txt的第一个值tuffing 后跟第三个键Set3.txt的第一个值ELSE

既然我有3个值,我应该对它们进行排序并存储在arraylist中

然后我需要先计算第一个键的第二个值,再计算第二个键的第二个值,再计算第三个键的第三个值。 将其排序并存储在同一arraylist中

我应该继续重复这个过程,直到我把所有的单词都说完

我正在使用Java8

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

假设所有列表都包含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);
如果需要对每个三元组中的值进行独立排序,则可以在正确的位置添加.sorted,例如fileMap.values.stream.maplist->list.getindex.sorted,然后输出为:

[binnikemask, rseelse, tuffing, attityd, spjäla, vågat, cognac, ljud, underskott]

终于找到了。谢谢@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);

感谢大家提供的解决方案。

SortedSet、SortedMap及其实现是您的朋友。如果需要,您还可以定义自定义比较器。所有列表的长度是否相同?你事先知道长度吗?把你的预期结果加到你的问题上。您的分拣要求不清楚。@Gunnar感谢您的建议!任意数量的文件没有问题,只要每个密钥文件都有一个正好有3个值的列表。嗨,Markus,感谢您的响应。密钥文件可能有“n”个。因此它可能来自Set1……SetN.txt。我应该将上述逻辑放在foreach循环中吗?对于Entry Entry:fileMap.entrySet{System.out.printlnentry.getKey+/+Entry.getValue;}“Entry.getKey”将为我们提供Set1.txt…setN.txt,而值将通过“Entry.getValue”获得;但它会抛出一条错误消息,因为“类型映射中的方法put String,list不适用于参数String,list”Thankstory Markus!互联网连接存在一些问题,因此我无法完成我的第一个评论。道歉!
[binnikemask, rseelse, tuffing, attityd, spjäla, vågat, cognac, ljud, underskott]
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);