本文主要是介绍Java中Map的merge、compute、computeIfAbsent、computeIfPresent的用法以及使用场景(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本文由黑壳博客转发
本文来源Java中Map的merge、compute、computeIfAbsent、computeIfPresent的用法以及使用场景(一)
一篇一笑
正文
Java中Map的merge、compute、computeIfAbsent、computeIfPresent的用法以及使用场景(一)
merge,computeIfAbsent使用场景
merge的用法
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<Student> 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<String, Integer> 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<String, Integer> map){ for (Map.Entry<String, Integer> e : map.entrySet()) { System.out.println("key:"+e.getKey()+" "+"value:"+e.getValue()); } }
结果:
key:女 value:63
key:男 value:38
1.8中的实现
现在我们要做一个操作,把list中的对象,按照属性男女分组,然后把年龄汇总。如果是1.8之前的实现。
/** * @author xbmeng */ public static void main(String[] args) { //学生的集合 List<Student> 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<String, Integer> resultMap = new HashMap<>(); for (Student student : students) { resultMap.merge(student.getSex(), student.getAge(), (a, b) -> b + a); } printResult(resultMap); } private static void printResult(Map<String, Integer> map){ for (Map.Entry<String, Integer> e : map.entrySet()) { System.out.println("key:"+e.getKey()+" "+"value:"+e.getValue()); } }
结果:
key:女 value:63
key:男 value:38
computeIfAbsent的用法,map缓冲区
merge :computeIfAbsent(K key,
Function《? super K, ? extends V> mappingFunction)
merge 的方法有两个参数 第一个是所选map的key,第二个是需要做的操作。这个方法当key值不存在时才起作用。
之前的实现
情景:按照男女分组。
/** * @author xbmeng */ public static void main(String[] args) { //学生的集合 List<Student> 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<String, List<Student>> resultMap = new HashMap<>(); for (Student student : students) { List<Student> 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}]}
1.8中的实现
情景:按照男女分组。
/** * @author xbmeng */ public static void main(String[] args) { //学生的集合 List<Student> 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<String, List<Student>> resultMap = new HashMap<>(); for (Student student : students) { List<Student> 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 下一篇博客。
About
欢迎在评论写下你的程序员趣事~~
欢迎加入我们的小组织 ,大家都叫壳叔,期待你的到来。
欢迎关注公众号
这是我们的Group
黑壳家根据地 Q群:200408242
这篇关于Java中Map的merge、compute、computeIfAbsent、computeIfPresent的用法以及使用场景(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!