lambda表达式对List<User>这种对象的数据排序可以直接用(User::getName())这种方法,如果是map呢?
方法1:写一个get方法,然后调用
方法2:lambda表达式匿名函数实现
public class StreamMap3 {
public static void main(String[] args) {
Map<String, Object> map1 = new HashMap<>();
map1.put("name", "张三");
map1.put("age", 20);
Map<String, Object> map2 = new HashMap<>();
map2.put("name", "王五");
map2.put("age", 19);
Map<String, Object> map3 = new HashMap<>();
map3.put("name", "赵六");
map3.put("age", 25);
Map<String, Object> map4 = new HashMap<>();
map4.put("name", "张三");
map4.put("age", 35);
List<Map<String, Object>> list = new ArrayList<>();
list.add(map1);
list.add(map2);
list.add(map3);
list.add(map4);
System.out.println(list);
List<Map<String, Object>> newList = list.stream()
.sorted(Comparator.comparing(StreamMap3::getName)
.thenComparing((Map<String, Object> paramMap) -> (int) paramMap.get("age")))
.collect(Collectors.toList());
System.out.println(newList);
}
private static String getName(Map<String, Object> map){
return (String) map.get("name");
}
}
第一个参数name,通过方法getName取出,StreamMap3为类名
第二个参数通过匿名函数实现
执行结果
[{name=张三, age=20}, {name=王五, age=19}, {name=赵六, age=25}, {name=张三, age=35}]
[{name=张三, age=20}, {name=张三, age=35}, {name=王五, age=19}, {name=赵六, age=25}]
以上