繁体   English   中英

排序图<String, List<Object> &gt; 使用 Java 8

[英]Sorting Map<String, List<Object>> using java 8

如何使用值中的数据对地图进行排序 示例: Map<String, List<someObject>>是我的输入。 我需要排序并获取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排序后的OUTPUT:

条目 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<String, List<someObject>>我需要使用 var2 值对这个 Map 集合进行排序

钥匙进入前:123,456,789

排序后键在:789,123,456

你想要的是不可能的。 查看Map界面文档显示

[...] 一些地图实现,如TreeMap类,对它们的顺序做出特定保证; 其他的,比如HashMap类,没有。 [...]

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

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));

** 请注意,表示Number s(这里主要是Integer s)然后根据它们进行排序可能不是人们应该想要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM