当前位置: 首页 > 知识库问答 >
问题:

如何按内部键降序排序嵌套映射,然后按内部值升序排序?

林华皓
2023-03-14

(“Samsung”,(“Galaxy”,20))

(“苹果”,(“iPhone”,40))

我需要按照内部键的字母顺序对映射进行降序排序(在这个例子中是模型名)

我到目前为止的排序是这样的:

Map.EntrySet().Stream.Foreach(entry->entry.GetValue().EntrySet().Stream().Sorted(Comparator.Comparative(Map.entry::GetKey,Comparator.ReverseOrder()))

而且我知道我必须添加.thencomparate(),但我不知道下一步如何进行。

共有1个答案

郜俊晤
2023-03-14

您可以编写一个CustomComparator,如下所示:

import java.util.*;

public int compare(Object obj1  , Object obj2){

        Map<String, Map<String, Integer> > map1 = (Map<String, Map<String, Integer>) obj1;
        Map<String, Map<String, Integer> > map2 = (Map<String, Map<String, Integer>) obj2;
        Map.Entry e1 = (Map.Entry)map1.entrySet();
        Map.Entry e2 = (Map.Entry)map2.entrySet();
        String brand1 = (String)e1.getKey();
        String brand2 = (String)e2.getKey();
        Map.Entry e3 = (Map.Entry)e1.getValue();
        Map.Entry e4 = (Map.Entry)e3.getValue();
        Integer price1 =(Integer) e3.getValue();
        Integer price2 =(Integer) e4.getValue();

        if(brand2.compareTo(brand1) != 0){
            return brand2.compareTo(brand1);
        }else{
            price1.compareTo(price2);
        }
      }
    }

这个压缩器将首先按照品牌名称的降序对数据进行排序,如果两个品牌具有相同的名称,那么它将按照价格的升序进行排序。

您必须在树状图中添加数据,如下所示

 类似资料:
  • 我们必须按降序对数组进行部分排序。 我知道d::partial_sort但它是按升序排列的。 http://en.cppreference.com/w/cpp/algorithm/partial_sort. 是他们的任何其他这样的功能,可以这样做,或任何快速算法这样做。

  • 考虑下面的哈希图: 具有诸如 我需要按值对hashmap进行降序排序,但如果值相等,则按键进行升序排序: 到目前为止,我试着分别按键排序,然后按值排序,但我不相信这种方法。除了创建更多的hashmaps之外,还有什么好方法呢?

  • 我有一个HashMap与作为关键和一个值作为价值。 我的目标是通过降序值对Hashmap进行排序。应在

  • 我有一个类似于以下内容的HashMap: 有什么建议吗? 我首先比较值,只有在值重复的情况下才比较键。所以我同时使用键和值,而不仅仅是值。

  • 我有一个通用的链表,目前由int组成,我想在默认情况下按升序排序,然后切换一个布尔值,按降序排序。我该怎么做?

  • 问题内容: 在发现了惊人的发现之后,我再次陷入了困境。 问题是我有一个形式的字典,我需要按其整数值的降序对其进行排序, 但是 如果两个元素的值相同,则按键的升序排列。 一个使它更清楚的例子: 经过研究后,我得出以下结论: 这是因为它对值和键都进行了反向排序。我需要不撤消的钥匙。 问题答案: 就像是