如何在Java中对多重映射进行排序?
因此,我尝试在Java中对多重映射进行排序,以下是映射的外观:如何在Java中对多重映射进行排序?,java,data-structures,Java,Data Structures,因此,我尝试在Java中对多重映射进行排序,以下是映射的外观: Map<Integer, Pair<Double, Color>> inputMap; Map<Integer, Pair<Double, Color>> outputMap; Map-inputMap; 地图输出地图; 这是我的结对课: class Pair<Double, Color> { public final Double x; public fina
Map<Integer, Pair<Double, Color>> inputMap;
Map<Integer, Pair<Double, Color>> outputMap;
Map-inputMap;
地图输出地图;
这是我的结对课:
class Pair<Double, Color> {
public final Double x;
public final Color y;
public Pair(Double x, Color y) {
this.x = x;
this.y = y;
}
}
类对{
公开决赛双x;
公共最终颜色y;
公共线对(双x,y色){
这个.x=x;
这个。y=y;
}
}
我正试着按一对中的第一项对它进行排序。我试着用这样的方法:
outputMap=newtreemap(inputMap)代码>
但这并不完全符合我的想法。。。它似乎一点也不排序
如何按Pair.X对映射进行排序?不能按映射值排序-只能按键排序
如果您需要对对象进行O(1)访问的HashMap和排序遍历,请创建一个排序列表并将相同的对象保留在那里
List<Pair<Double, Object>>outputList = inputMap.values().stream().sorted((o1, o2) -> 0 /*IMPLEMENT_COMPARATOR_HERE*/).collect(Collectors.toList());
ListoutputList=inputMap.values().stream().sorted((o1,o2)->0/*在此处实现比较器*/).collect(collector.toList());
如果映射是可变的,那么最好创建一个同时包含-map和list的类,并提供“add”、“get”和“remove”等方法。应避免直接进入这些结构
不要忘记同步两个数据结构上的操作,以使代码线程安全 不能按贴图值排序-只能按键排序
如果您需要对对象进行O(1)访问的HashMap和排序遍历,请创建一个排序列表并将相同的对象保留在那里
List<Pair<Double, Object>>outputList = inputMap.values().stream().sorted((o1, o2) -> 0 /*IMPLEMENT_COMPARATOR_HERE*/).collect(Collectors.toList());
ListoutputList=inputMap.values().stream().sorted((o1,o2)->0/*在此处实现比较器*/).collect(collector.toList());
如果映射是可变的,那么最好创建一个同时包含-map和list的类,并提供“add”、“get”和“remove”等方法。应避免直接进入这些结构
不要忘记同步两个数据结构上的操作,以使代码线程安全 所有实现(包括TreeMap
)都按键进行排序,而不是按值进行排序
进一步提供其键的总顺序的映射
按值对映射图进行内部排序也会对性能造成不利影响,因为通过键进行访问时,性能得到了优化
A仅将一个值与每个键关联。
当您查看
将指定值与此映射中的指定键关联(可选操作)如果映射以前包含键的映射,则旧值将替换为指定值。
因此,您用Map
定义的内容甚至不是一个简单的概念。这就解释了为什么它的行为不符合你的预期
您正在寻找的是一个
一种SetMultimap,其给定键的值集保持排序;也就是说,它们构成了一个分类数据集
与
然后,您可以使用创建SortedSetMultimap
TreeMultimap<Integer, ColorPair> sortedSetMap = new TreeMultimap<>() `
TreeMultimap sortedSetMap=new TreeMultimap()`
并用颜色对填充它所有实现(包括TreeMap
)按键排序
而不是按值排序
进一步提供其键的总顺序的映射
按值对映射图进行内部排序也会对性能造成不利影响,因为通过键进行访问时,性能得到了优化
A仅将一个值与每个键关联。
当您查看
将指定值与此映射中的指定键关联(可选操作)如果映射以前包含键的映射,则旧值将替换为指定值。
因此,您用Map
定义的内容甚至不是一个简单的概念。这就解释了为什么它的行为不符合你的预期
您正在寻找的是一个
一种SetMultimap,其给定键的值集保持排序;也就是说,它们构成了一个分类数据集
与
然后,您可以使用创建SortedSetMultimap
TreeMultimap<Integer, ColorPair> sortedSetMap = new TreeMultimap<>() `
TreeMultimap sortedSetMap=new TreeMultimap()`
并用突出显示的颜色对填充它
{1=Pair{x=1.0, y=java.awt.Color[r=0,g=0,b=0]}, 3=Pair{x=2.0, y=java.awt.Color[r=0,g=0,b=255]}, 2=Pair{x=3.0, y=java.awt.Color[r=255,g=0,b=0]}}
您可以使用以下命令对地图进行排序:
Map<Integer, Pair<Double, Color>> sortedMap = map.entrySet().stream()
.sorted(Comparator.comparingDouble(e -> e.getValue().x))
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(p1, p2) -> p1,
LinkedHashMap::new));
突出显示
{1=Pair{x=1.0, y=java.awt.Color[r=0,g=0,b=0]}, 3=Pair{x=2.0, y=java.awt.Color[r=0,g=0,b=255]}, 2=Pair{x=3.0, y=java.awt.Color[r=255,g=0,b=0]}}
您可以使用以下命令对地图进行排序:
Map<Integer, Pair<Double, Color>> sortedMap = map.entrySet().stream()
.sorted(Comparator.comparingDouble(e -> e.getValue().x))
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(p1, p2) -> p1,
LinkedHashMap::new));
所有实现都按键排序,而不是按值排序。您想按整数键和对中的双精度还是仅按双精度排序?排序意味着顺序。当您希望能够对这些pair对象进行排序时,您需要定义(首先在概念上,然后在代码中)是什么使pair1键排序,而不是按值排序。您想按整数键和对中的双精度还是仅按双精度排序?排序意味着顺序。当您希望能够对这些pair对象进行排序时,您需要定义(首先在概念上,然后在代码中)是什么使pair1