gpt4 book ai didi

java - 使用谓词按字符串值对映射进行排序

转载 作者:行者123 更新时间:2023-12-05 09:09:06 28 4
gpt4 key购买 nike

我正在尝试按具有预测值的字符串值对 map 进行排序。例如,我的 map 中有下一个值

message,
message_message1_message2,
message1_message2,

我想按值字符串中的 _ 符号对我的 map 进行排序。结果应该是这样的:

message_message1_message2,
message1_message2,
message

我正在尝试这种方式:

        myMap.entrySet().stream().sorted((e1, e2) -> {
String[] firstCompareValue = e1.getKey().split("_");
String[] secondCompareValue = e2.getKey().split("_");
return Integer.compare(firstCompareValue.length, secondCompareValue.length);
}).collect(Collectors.toMap(Map.Entry::getKey, Function.identity()));

我有下一个通知

Redundant 'sorted' call: subsequent 'toMap' call doesn't depend onthe sort order

我做错了什么?如何实现?

最佳答案

Collectors.toMap()您正在使用的变体会创建一个 HashMap (至少这是当前的实现),因此它不会保留您的 Stream 生成的顺序.

如果您生成一个 LinkedHashMap ,它将被保留:

    myMap.entrySet().stream().sorted((e1, e2) -> {
String[] firstCompareValue = e1.getKey().split("_");
String[] secondCompareValue = e2.getKey().split("_");
return Integer.compare(firstCompareValue.length, secondCompareValue.length);
}).collect(Collectors.toMap(Map.Entry::getKey,
Function.identity(),
(v1,v2)->v1,
LinkedHashMap::new));

顺便说一句,您正在创建一个 Map<String,Map.Entry<String,String>> ,我不确定这是你想要的。如果你想要 Map<String,String>更改 Function.identity()Map.Entry::getValue .

关于java - 使用谓词按字符串值对映射进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62674790/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com