Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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_Sorting_Collections - Fatal编程技术网

如何在java中对其他映射中的一组映射进行排序?

如何在java中对其他映射中的一组映射进行排序?,java,sorting,collections,Java,Sorting,Collections,我对由地图组成的复杂对象中的标签排序有问题 Map<Class<? extends Fiche>, Map<String, Map<Family, Set<Map<ObjectField, DetailsField>>>>> Fields = new HashMap<>(); Map您使用的数据模型可以表示为: A -> B -> C -> [D -> E] 你的问题是如何按D排序。鉴

我对由地图组成的复杂对象中的标签排序有问题

Map<Class<? extends Fiche>, Map<String, Map<Family, Set<Map<ObjectField, DetailsField>>>>> Fields = new HashMap<>();

Map您使用的数据模型可以表示为:

A -> B -> C -> [D -> E]
你的问题是如何按
D
排序。鉴于
D
在您的结构中有四个层次,您需要为
A
B
C
提供键,以便能够找到
D->E
映射的集合进行排序。这没有什么神奇之处:如果没有前三个值,你就无法进入第三级-这是地图的本质

一旦有了
集合
,按
D
排序可以解释为按
D
的自然顺序迭代所有
(D,E)
对。这可以通过以下方式实现:

Set<Map<D,E>> setOfMaps;
setOfMaps.stream()
    .flatMap(map -> map.entrySet().stream())
    .sorted(Map.Entry.comparingByKey())
    ...
设置一组映射;
setOfMaps.stream()
.flatMap(map->map.entrySet().stream())
.sorted(Map.Entry.comparingByKey())
...
这将生成一个
,然后您可以根据需要使用
forEach
或收集器对其进行处理


作为注释,如果将数据结构的某些部分封装在类中,而不是完全依赖于集合,那么代码可能会更清晰

您正在使用的数据模型可以表示为:

A -> B -> C -> [D -> E]
你的问题是如何按
D
排序。鉴于
D
在您的结构中有四个层次,您需要为
A
B
C
提供键,以便能够找到
D->E
映射的集合进行排序。这没有什么神奇之处:如果没有前三个值,你就无法进入第三级-这是地图的本质

一旦有了
集合
,按
D
排序可以解释为按
D
的自然顺序迭代所有
(D,E)
对。这可以通过以下方式实现:

Set<Map<D,E>> setOfMaps;
setOfMaps.stream()
    .flatMap(map -> map.entrySet().stream())
    .sorted(Map.Entry.comparingByKey())
    ...
设置一组映射;
setOfMaps.stream()
.flatMap(map->map.entrySet().stream())
.sorted(Map.Entry.comparingByKey())
...
这将生成一个
,然后您可以根据需要使用
forEach
或收集器对其进行处理


作为注释,如果将数据结构的某些部分封装在类中,而不是完全依赖于集合,那么代码可能会更清晰

要按字母顺序在地图中存储数据吗?Java就是为了这个。TreeMap和HashMap的使用基本相同,但它们存储内部信息的方式略有不同。您只需更改初始值设定项即可保持代码的编译。

是否要按字母顺序在地图中存储数据?Java就是为了这个。TreeMap和HashMap的使用基本相同,但它们存储内部信息的方式略有不同。您只需更改初始值设定项即可保持代码的编译。

HashMap通常不适合对元素进行排序,因为它使用自己的算法来确定存储位置。我想知道您是否应该为此创建一个新的数据结构。某种程度的抽象。似乎您的参数化类型让您感到困惑。@MaxZoom我完全同意您的看法,我正在考虑用树形图替换最后一个贴图,但我不确定代码上是否没有任何imact。@user489041这就是问题所在,旧代码是用来显示所有数据的,现在我应该对这些数据进行排序。HashMap通常是一个不好的元素排序选择,因为它使用自己的算法来决定存储位置。我想知道你是否应该在今年创建一个新的数据结构。某种程度的抽象。似乎您的参数化类型让您感到困惑。@MaxZoom我完全同意您的看法,我正在考虑用树形图替换最后一个贴图,但我不确定代码上是否没有任何imact。@user489041这就是问题所在,旧代码是用来显示所有数据的,现在我应该对这些数据进行排序。它不是同一个规范,但键是一个枚举,包含许多变量,我想根据这个枚举的id对键(枚举)进行排序,可能吗?您可以尝试创建一个映射来对枚举进行排序。向映射添加值,如
mapOfValues.put(currEnum.toString(),currEnum)这将为您提供一个按字母顺序排列的枚举及其名称的映射。那肯定会给你一张有条理的地图。还要检查这个问题,它应该有助于更好的想法,但键是一个枚举,它包含许多变量,我想根据这个枚举的id对键(枚举)进行排序,可能吗?您可以尝试创建一个映射来对枚举进行排序。向映射添加值,如
mapOfValues.put(currEnum.toString(),currEnum)这将为您提供一个按字母顺序排列的枚举及其名称的映射。那肯定会给你一张有条理的地图。也看看这个问题,它应该会有帮助