场景
List<User> userList= [
{id:1,userName:"张三",roleId:3},
{id:2,userName:"李四",roleId:3},
{id:3,userName:"王五",roleId:2}
]
List 按 roleId 分组后的map
Map<Integer,List<User>> map = userList.stream().collect(Collectors.groupingBy(User::getRoleId));
希望能够保持原有list的顺序
期望值:
key:3
Value: [
{id:1,userName:"张三",roleId:3},
{id:2,userName:"李四",roleId:3}
]
key:2
Value : [
{id:3,userName:"王五",roleId:2}
]
实际输出为:
key:2
Value : [
{id:3,userName:"王五",roleId:2}
]
key:3
Value: [
{id:1,userName:"张三",roleId:3},
{id:2,userName:"李四",roleId:3}
]
Collectors.groupingBy方法是有三个参数的:
- 第一个参数就是key的Function了
- 第二个参数是一个map工厂,也就是最终结果的容器,一般默认的是采用的HashMap::new
- 最后一个参数很重要是一个downstream,类型是Collector,也是一个收集器
所以修改以上方法为:
Map<Integer,List<User>> map = userList.stream().collect(Collectors.groupingBy(User::getRoleId,LinkedHashMap::new,Collectors.toList()));
返回的是期望值,问题解决