Java中Map的merge、compute、computeIfAbsent、computeIfPresent的用法以及使用场景(一)

本文主要是介绍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的用法以及使用场景(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/447855

相关文章

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

SpringBoot实现微信小程序支付功能

《SpringBoot实现微信小程序支付功能》小程序支付功能已成为众多应用的核心需求之一,本文主要介绍了SpringBoot实现微信小程序支付功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录一、引言二、准备工作(一)微信支付商户平台配置(二)Spring Boot项目搭建(三)配置文件

解决SpringBoot启动报错:Failed to load property source from location 'classpath:/application.yml'

《解决SpringBoot启动报错:Failedtoloadpropertysourcefromlocationclasspath:/application.yml问题》这篇文章主要介绍... 目录在启动SpringBoot项目时报如下错误原因可能是1.yml中语法错误2.yml文件格式是GBK总结在启动S

鸿蒙中@State的原理使用详解(HarmonyOS 5)

《鸿蒙中@State的原理使用详解(HarmonyOS5)》@State是HarmonyOSArkTS框架中用于管理组件状态的核心装饰器,其核心作用是实现数据驱动UI的响应式编程模式,本文给大家介绍... 目录一、@State在鸿蒙中是做什么的?二、@Spythontate的基本原理1. 依赖关系的收集2.

Python基础语法中defaultdict的使用小结

《Python基础语法中defaultdict的使用小结》Python的defaultdict是collections模块中提供的一种特殊的字典类型,它与普通的字典(dict)有着相似的功能,本文主要... 目录示例1示例2python的defaultdict是collections模块中提供的一种特殊的字

Spring中配置ContextLoaderListener方式

《Spring中配置ContextLoaderListener方式》:本文主要介绍Spring中配置ContextLoaderListener方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录Spring中配置ContextLoaderLishttp://www.chinasem.cntene

pytorch之torch.flatten()和torch.nn.Flatten()的用法

《pytorch之torch.flatten()和torch.nn.Flatten()的用法》:本文主要介绍pytorch之torch.flatten()和torch.nn.Flatten()的用... 目录torch.flatten()和torch.nn.Flatten()的用法下面举例说明总结torch

java实现延迟/超时/定时问题

《java实现延迟/超时/定时问题》:本文主要介绍java实现延迟/超时/定时问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java实现延迟/超时/定时java 每间隔5秒执行一次,一共执行5次然后结束scheduleAtFixedRate 和 schedu

Java Optional避免空指针异常的实现

《JavaOptional避免空指针异常的实现》空指针异常一直是困扰开发者的常见问题之一,本文主要介绍了JavaOptional避免空指针异常的实现,帮助开发者编写更健壮、可读性更高的代码,减少因... 目录一、Optional 概述二、Optional 的创建三、Optional 的常用方法四、Optio

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序