将一个List<Map<String,Object>>对象按照其中Map的某个key的值进行分组并降序排列。如有这样一个list:

将一个List<Map<String,Object>>对象按照其中Map的某个key的值进行分组并降序排列。如有这样一个list:
List<Map<String,Object>> list = new ArrayList(){{
add(new HashMap(){{put("a","1");put("","0");}});
add(new HashMap(){{put("a","a11");put("b","2");}});
add(new HashMap(){{put("a","111");put("c","3");}});
add(new HashMap(){{put("b","22");}});
add(new HashMap(){{put("a","1111");put("b","222");}});
}};
此list直接打印结果如下:
[{=0,a=1},{b=2,a=11},{c=3,a=111},{b=22},{b=222,a=1111}]
执行上述算法后打印结果如下:
{1111=[{b=222,a=1111}],111=[{c=3,a=111}],11=[{b=2,a=11}],1=[{=0,a=1}]}此结果是按照上述key="a"运算得到的。
(1)请写一个私有的静态方法完成算法,此算法至少包含参数List<Map<String,Object>>dataList和String key,实际传入dataList为List<Map<String,String>>类型
(2)上述示例中,如果传入key="",请写出最终打印结果

使用TreeMap 存放元素并排序,以下代码仅供参考:

package com.kidd.test.zhidao;

import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

public class Test {
public static void main(String[] args) throws ClassNotFoundException, MalformedURLException {
List<Map<String, Object>> list = null;
list = instance(list);

System.out.println(list);

System.out.println(grouping(list, "a"));
}

private static Map<String, Object> grouping(List<Map<String, Object>> list, String key) {
// 使用TreeMap存放元素并排序
Map<String, Object> newMap = new TreeMap<>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);
}
});

list.stream().forEach(m -> {
if (m.containsKey(key)) {
List<Object> l = new ArrayList<>();
l.add(m);
newMap.put(m.get(key).toString(), l);
}
});
;
return newMap;
}

private static List<Map<String, Object>> instance(List<Map<String, Object>> list) {
list = new ArrayList() {
{
add(new HashMap() {
{
put("a", "1");
put("", "0");
}
});
add(new HashMap() {
{
put("a", "a11");
put("b", "2");
}
});
add(new HashMap() {
{
put("a", "111");
put("c", "3");
}
});
add(new HashMap() {
{
put("b", "22");
}
});
add(new HashMap() {
{
put("a", "1111");
put("b", "222");
}
});
}
};
return list;
}
}

温馨提示:答案为网友推荐,仅供参考
相似回答