【问题标题】:Sorting Map<String, List<Object>> using java 8使用 java 8 对 Map<String, List<Object>> 进行排序
【发布时间】:2019-02-08 21:49:06
【问题描述】:

如何使用值中的数据对地图进行排序 示例:Map&lt;String, List&lt;someObject&gt;&gt; 是我的输入。我需要在someObject.getVar2()中排序并获取订单

示例:

class SomeObject{
    String var1;
    String var2;
    String var3;
    // getters and setters
}

输入

条目 1:

{
Key1 = 123
[
someObject
[
var1=4
var2=5
var3=6
]
]
}

条目 2:

{
Key1 = 456
[
someObject
[
var1=2
var2=8
var3=1
]
]
}

条目 3:

{
Key1 = 789
[
someObject
[
var1=1
var2=2
var3=3
]
]
}

按照var2排序后的输出:

条目 1:

{
Key1 = 789
[
someObject
[
var1=1
var2=2
var3=3
]
]
}

条目 2:

{
Key1 = 123
[
someObject
[
var1=4
var2=5
var3=6
]
]
}

条目 3:

{
Key1 = 456
[
someObject
[
var1=2
var2=8
var3=1
]
]
}

Map中有3个条目,格式为Map&lt;String, List&lt;someObject&gt;&gt; 我需要用 var2 值对这个 Map 集合进行排序

在密钥之前:123,456,789

排序后的key在:789,123,456

【问题讨论】:

  • 地图> *
  • 是带数值的字符串
  • 示例数据:{123=[someObject [var1="1", var2="1", var3="2", var4="3", var5="4", var6=" 5", var7=true]]} .......... 123 是 String 数据类型中的键 ... someObject 是 String 中具有不同变量的值,我可以将种姓输入为数值
  • 请阅读我的评论,在帖子中添加代码或示例,输入是什么,输出应该是什么
  • 您是尝试按列表条目对地图进行排序还是对列表进行排序?

标签: java java-8 hashmap java-stream


【解决方案1】:

你想要的都是不可能的。查看documentation of the Map interface 会发现

[...] 一些地图实现,如TreeMap 类,对它们的顺序做出具体保证;其他人,如HashMap 类,则不这样做。 [...]

【讨论】:

    【解决方案2】:

    您的输入并不真正适合您使用的数据结构,即Map&lt;String, List&lt;SomeObject&gt;&gt;。由于值中从来没有List(如果有,则必须重新定义排序逻辑。)因此,您可以简单地将当前输入表示为Map&lt;String, SomeObject&gt;

    Map<String, SomeObject> input = new HashMap<>(); // initialised with your sample
    

    然后排序为:

    Map<String, SomeObject> output = map.entrySet()
        .stream()
        .sorted(Comparator.comparing(o -> o.getValue().getVar2())) // **
        .collect(Collectors
            .toMap(Map.Entry::getKey, Map.Entry::getValue, (a, b) -> a, LinkedHashMap::new));
    

    ** 请注意,代表Numbers(这里主要是Integers)然后根据它们进行排序可能不是人们想要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-26
      • 2021-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多