使用 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()));
我的清单是这样的,
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()));