问题描述
的课程
public class Info {
private String account;
private String opportunity;
private Integer value;
private String desc;
}
我想将Info
的列表按两个字段(帐户和机会)分组,然后根据值对它进行排序。即
分组和排序之前的信息列表:
List<Info> infos = [(account = 1234,opportunity = abs,value = 4,desc= test),(account = 1234,value = 5,desc = testing),opportunity = abss,value = 10,desc = vip),(account = 123,value = 8,(account = 12,opportunity = absddd,desc = production),opportunity = absooo,value = 2,desc = test)]
我期望在分组和排序后的结果,
Map<String,Map<String,List<Info>>> result = {
1234 = {
abss = [(account = 1234,desc = vip)],abs = [(account = 1234,desc = test)]
},123 = {
abss = [(account = 123,desc = vip)]
},12 = {
absddd = [(account = 12,desc = production)],absooo = [(account = 12,desc = test)]
}
}
o / p根据值(10->(5 + 4)-> 8-> 4-> 2)进行排序
到目前为止,我已经尝试过= infos.stream().collect(Collectors.groupingBy(Info::getAccount,Collectors.groupingBy(r -> r.getopportunity(),Collectors.toList())))
,但它是随机排序的。
解决方法
要基于value
的{{1}}进行排序,
- 通过比较
Info
,使流sorted成为分组,以便按顺序执行分组。 - 调用groupingBy时,请在
value
中指定LinkedHashMap以保留插入顺序。
下面的程序演示了如何实现。
mapFactory