使用 Collectors.groupingBy() 时 TreeMap 排序不起作用

TreeMap sorting not working when using Collectors.groupingBy()

我的清单是这样的,

List<Map<String, Object>> sortedList = new ArrayList<>();

我的列表是

[{column_changed=first_name, sequence_number=190001, change_date=2019-01-01, customer_number=3100}, {column_changed=last_name, sequence_number=190001, change_date=2019-01-01, customer_number=3100}, {column_changed=mail_id, sequence_number=19002, change_date=2019-01-05, customer_number=3101}, {column_changed=date_of_birth, sequence_number=190002, change_date=2019-01-05, customer_number=3101}, {column_changed=国籍,sequence_number=190002,change_date=2019-01-05,customer_number=3101}, {column_changed=contact_number, sequence_number=19003, change_date=2019-01-10, customer_number=3102}]

我初始化一个Map实例如下,

Map<String, List<Map<String, Object>>> mySortedMap = new TreeMap<>();

当我使用 Collectors.groupingBy() 使用 sequence_number,

mySortedMap = sortedList.stream().collect(Collectors.groupingBy(change -> (String)change.get("sequence_number")));

输出结果如下,

{190001=[{column_changed=first_name, sequence_number=190001, change_date=2019-01-01, customer_number=3100} , {column_changed=last_name, sequence_number=190001, change_date=2019-01-01, customer_number=3100}], 19003=[{column_changed=contact_number, sequence_number=19003, change_date=2019-01-10, customer_number=3102}], 19002=[{column_changed=mail_id, sequence_number=19002, change_date=2019-01-05, customer_number=3101}, {column_changed=date_of_birth, sequence_number=190002, change_date=2019-01-05, customer_number=3101}, {column_changed=国籍,sequence_number=190002,change_date=2019-01-05,customer_number=3101}]}

但我需要 键进行排序。虽然实例是 TreeMap,但键未排序。我不知道为什么。谁能帮我解决这个问题。

此处您正在更改 mySortedMap 引用的对象。 groupingBy()返回的map可以是任意类型。从文档中,

There are no guarantees on the type, mutability, serializability, or thread-safety of the Map or List objects returned.

如果您的列表已排序,请尝试使用,

mySortedMap = sortedList.stream().collect(Collectors.groupingBy(
    change -> (String) change.get("sequence_number"), TreeMap::new, Collectors.toList()));