merge :default V merge(K key, V value,BiFunction《? super V, ? super V, ? extends V> remappingFunction)
merge 的方法有三个参数 第一个是所选map的key,第二个是需要合并的值,第三个是 如何合并,也就是说合并方法的具体实现。
现在我们要做一个操作,把list中的对象,按照属性男女分组,然后把年龄汇总。如果是1.8之前的实现。
/**
* @author xbmeng
*/
public static void main(String[] args) {
//学生的集合
List students = new ArrayList<>();
students.add(new Student("张三","男",18));
students.add(new Student("李四","男",20));
students.add(new Student("韩梅梅","女",18));
students.add(new Student("小红","女",45));
//声明接收结果的 map
Map resultMap = new HashMap<>();
for (Student student : students) {
Integer age = resultMap.get(student.getSex());
if(age != null){
resultMap.put(student.getSex(),student.getAge()+age);
}else {
resultMap.put(student.getSex(),student.getAge());
}
}
printResult(resultMap);
}
private static void printResult(Map map){
for (Map.Entry e : map.entrySet()) {
System.out.println("key:"+e.getKey()+" "+"value:"+e.getValue());
}
}
结果:
key:女 value:63
key:男 value:38
现在我们要做一个操作,把list中的对象,按照属性男女分组,然后把年龄汇总。如果是1.8之前的实现。
/**
* @author xbmeng
*/
public static void main(String[] args) {
//学生的集合
List students = new ArrayList<>();
students.add(new Student("张三","男",18));
students.add(new Student("李四","男",20));
students.add(new Student("韩梅梅","女",18));
students.add(new Student("小红","女",45));
//声明接收结果的 map
Map resultMap = new HashMap<>();
for (Student student : students) {
resultMap.merge(student.getSex(), student.getAge(), (a, b) -> b + a);
}
printResult(resultMap);
}
private static void printResult(Map map){
for (Map.Entry e : map.entrySet()) {
System.out.println("key:"+e.getKey()+" "+"value:"+e.getValue());
}
}
结果:
key:女 value:63
key:男 value:38
merge :computeIfAbsent(K key,
Function《? super K, ? extends V> mappingFunction)
merge 的方法有两个参数 第一个是所选map的key,第二个是需要做的操作。这个方法当key值不存在时才起作用。
情景:按照男女分组。
/**
* @author xbmeng
*/
public static void main(String[] args) {
//学生的集合
List students = new ArrayList<>();
students.add(new Student("张三","男",18));
students.add(new Student("李四","男",20));
students.add(new Student("韩梅梅","女",18));
students.add(new Student("小红","女",45));
//声明接收结果的 map
Map> resultMap = new HashMap<>();
for (Student student : students) {
List s = resultMap.get(student.getSex());
if(null == s){
s = new ArrayList<>();
resultMap.put(student.getSex(),s);
}
s.add(student);
}
System.out.println(resultMap);
}
结果:
{女=[Student{name=’韩梅梅’, sex=’女’, age=18}, Student{name=’小红’, sex=’女’, age=45}], 男=[Student{name=’张三’, sex=’男’, age=18}, Student{name=’李四’, sex=’男’, age=20}]}
情景:按照男女分组。
/**
* @author xbmeng
*/
public static void main(String[] args) {
//学生的集合
List students = new ArrayList<>();
students.add(new Student("张三","男",18));
students.add(new Student("李四","男",20));
students.add(new Student("韩梅梅","女",18));
students.add(new Student("小红","女",45));
//声明接收结果的 map
Map> resultMap = new HashMap<>();
for (Student student : students) {
List s = resultMap.computeIfAbsent(student.getSex(), k -> new ArrayList<>());
s.add(student);
}
System.out.println(resultMap);
}
结果:
{女=[Student{name=’韩梅梅’, sex=’女’, age=18}, Student{name=’小红’, sex=’女’, age=45}], 男=[Student{name=’张三’, sex=’男’, age=18}, Student{name=’李四’, sex=’男’, age=20}]}
compute,computeIfPresent 下一篇博客。