如何使用字符串键对地图排序?像(1 foo,2 foo)

时间:2018-12-13 16:09:03

标签: java sorting dictionary

'我正在使用休眠模式,我打算使用LinkedHashMap对元素进行排序,  但这不起作用,因为我无法进行初始化,因此我通过控制器进行了排序,因此它可以工作,但不是很好,这是我的排序方法。

public LinkedHashMap<String, Indicador> OrdenarMap(Map<String, Indicador> map) {

        LinkedHashMap<String, Indicador> sortedMap = new LinkedHashMap<>();

        map.entrySet()
                .stream()
                .sorted(Map.Entry.comparingByKey())
                .forEachOrdered(x -> sortedMap.put(x.getKey(), x.getValue()));

        return sortedMap;
    }

These are my keys the sort its correct but...

我想要这样的订单

{1 Objetivo General, 1.1 Objetivo Especifico, 2 Objetivo General} 等等...

2 个答案:

答案 0 :(得分:1)

查看TreeMap。按键的自然顺序排序

  

基于Red-Black树的NavigableMap实现。地图已排序   根据其键的自然顺序,或由比较器   在地图创建时提供,具体取决于使用哪个构造函数。

https://docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html

构造函数还可以使用键的比较器进行自己的排序。

答案 1 :(得分:1)

TreeMap与自定义Comparator一起使用。

默认情况下,字符串比较器按字典顺序比较字符串,这就是为什么您看到这样的std::function顺序的原因。

由于我假设您的密钥将始终为双精度,因此该比较器应该可以工作:

std::function<bool(int a, int b)>> pq([this](int a, int b){
   return std::abs(a - m_reference) < std::abs(b - m_reference);
});