根据大小对地图排序

眼睛

我有这样的地图:

Map<List<Item>, Double> items = new HashMap<List<Item>, Double>();

我想根据List<Item>最大的散列图的大小对散列图进行排序我不在乎相同大小的对象中的顺序。

到目前为止,我已经尝试使用TreeSetlike这样的方式:

SortedSet<Map.Entry<List<Item>, Double>> sortedItems = new TreeSet<Map.Entry<List<Item>, Double>>(
     new Comparator<Map.Entry<List<Item>, Double>>() {

        @Override
        public int compare(
            Entry<List<Item>, Double> o1,
            Entry<List<Item>, Double> o2) {
               return o2.getKey().size() - o1.getKey().size();
        }
    });
sortedItems.addAll(items.entrySet());

但是,sortedItems对象仅采用每个大小列表中的一个。它会将大小相等的列表视为重复列表,并忽略它们。我该如何解决此问题。

编辑:所以据我所知,当比较2个相同大小的列表时,我的compare方法正在返回0这告诉集合条目是相等的,它们被视为重复项。因此,我想解决此问题的唯一方法是确保compare方法永远不会返回0所以我写了这段代码:

@Override
public int compare(
    Entry<List<AuctionItem>, Double> o1,
    Entry<List<AuctionItem>, Double> o2) {
        if (o1.getKey().size() <= o2.getKey().size()) {
            return -1;
        } else {
            return 1;
        }
}
icza

如果您尝试将商品放入TreeSet自定义Comparator返回0的商品中,则该商品将不会放入Set

您必须使用Comparator不会返回的0对于List(胡)的大小都是平等的,你必须定义一个一致的任意的命令。

这是一种简便的方法:

new Comparator<Map.Entry<List<Item>, Double>>() {
    @Override
    public int compare(Entry<List<Item>, Double> o1,
                       Entry<List<Item>, Double> o2) {

        int diff = o2.getKey().size() - o1.getKey().size();
        return diff != 0 ? diff :
            System.identityHashCode(o2.getKey()) -
                System.identityHashCode(o1.getKey());
    }
};

基本上,我要做的是:如果2个列表的大小不同,size2 - size1则可以。如果它们具有相同的大小,我将返回它们的身份哈希码的差异,该差异将总是与之不同,0因为身份哈希码是对于不同对象而言是不同的内存地址。而且对于一个对象它始终是相同的,因此比较器对于2个具有相同大小的列表将始终返回相同的顺序。

使用此比较器,您将获得一个排序集合,该列表允许具有相同大小的列表,并且将按列表大小对其进行排序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据大小对地图排序

来自分类Dev

如何根据地图的“集合”值的大小对地图进行排序?

来自分类Dev

按值的大小对地图进行排序

来自分类Dev

如何根据值对地图进行排序

来自分类Dev

如何根据键对地图进行排序

来自分类Dev

如何根据地图的值参数对地图进行排序?

来自分类Dev

如何根据地图值对地图进行排序

来自分类Dev

如何根据地图的值参数对地图进行排序?

来自分类Dev

Java:对地图排序

来自分类Dev

Scala-根据元组值对地图排序

来自分类Dev

要根据对象键对地图进行排序

来自分类Dev

Flutter:如何根据价值对地图列表进行排序?

来自分类Dev

Scala-根据元组值对地图排序

来自分类Dev

在保持键的同时,根据对象属性对地图进行排序

来自分类Dev

如何使用Stl根据C ++中的值对地图进行排序?

来自分类Dev

在Java中按值对地图排序

来自分类Dev

在Android中对地图进行排序

来自分类Dev

如何按插入顺序对地图排序?

来自分类Dev

如何对地图的值进行排序?

来自分类Dev

如何对地图对象列表进行排序?

来自分类Dev

按降序对地图进行排序

来自分类Dev

按值的降序对地图排序

来自分类Dev

按特定顺序对地图进行排序

来自分类Dev

如何按值对地图进行排序?

来自分类Dev

在根据值对地图进行排序时,缺少一些值。是什么导致这种奇怪的行为?

来自分类Dev

使用比较器按地图值对地图进行排序

来自分类Dev

按Java8降序对地图进行排序

来自分类Dev

在Go模板中对地图迭代进行排序?

来自分类Dev

按javascript中的值对地图进行排序