Java基础之Java8中Map的compute的使用

一、介绍

Java8更新后,Map接口中提供了compute方法。下面我们先看看官方文档的对它的使用说明.


如果看完上面的还是不太明白的话,看下面的这个示例。然后再来看这段说明,你就明白的它的意思了。

二、使用

假如我们现在有一需求,需要统计一个字符串中各个单词出现的频率,然后从中找出频率最高的单词。让我们先来看看jdk8之前的写法。

    public static void main(String[] args) {String str = "hello java, i am vary happy! nice to meet you";// jdk1.8之前的写法HashMap<Character, Integer> result1 = new HashMap<>(32);for (int i = 0; i < str.length(); i++) {char curChar = str.charAt(i);Integer curVal = result1.get(curChar);if (curVal == null) {curVal = 1;} else {curVal += 1;}result1.put(curChar, curVal);}}

但是jdk8后,map给我们提供了更为便捷的接口方法,那就是本文要说的重点compute方法。

    public static void main(String[] args) {String str = "hello java, i am vary happy! nice to meet you";// jdk1.8的写法HashMap<Character, Integer> result2 = new HashMap<>(32);for (int i = 0; i < str.length(); i++) {char curChar = str.charAt(i);result2.compute(curChar, (k, v) -> {if (v == null) {v = 1;} else {v += 1;}return v;});}}

运行以上两段代码,发现运行的结构都是一样的。

{ =9, a=5, !=1, c=1, e=4, h=2, i=2, j=1, l=2, ,=1, m=2, n=1, o=3, p=2, r=1, t=2, u=1, v=2, y=3}

在这里可能有些同学不理解第二参数的含义,在这里简单说一下。
Function作为一个函数式接口,主要方法apply接收一个参数,返回一个值。这个有点类似数学中一元函数。

@FunctionalInterface
public interface Function<T, R> {/*** Applies this function to the given argument.** @param t the function argument* @return the function result*/R apply(T t);
}

而 BiFunction则是Function函数的升级版。聪明的同学可能会发现Function只能接受一个参数。假如我的函数体有两个参数,咋办呢。而BiFunction正是解决这一问题而出现的。

这两者的都不难。看示例。

@FunctionalInterface
public interface BiFunction<T, U, R> {/*** Applies this function to the given arguments.** @param t the first function argument* @param u the second function argument* @return the function result*/R apply(T t, U u);}

简单示例:

        // 求一个数的平方Function<Integer, Integer> fun1= arg -> arg * arg;Integer apply = fun1.apply(10);// 100System.out.println(apply);// 求输入两个的和BiFunction<Integer, Integer, Integer> fun2 = (arg1, arg2) -> arg1 + arg2;Integer sum = fun2.apply(10, 20);// 30System.out.println(sum);

三、其他

  • Map接口的compute方法的二元函数。如果key不存在或者key对应的value为null的话,则其value都是null。否则就是key对应的value值。(这点可以在官方文档中体现出来)

Java基础之Java8中Map的compute的使用相关推荐

  1. Java基础之Java8中map和flatMap的使用

    Java基础之Java8中map和flatMap的使用 一.介绍 首先,看下map和flatMap的官方文档说明 map flatMap 其实单纯的看api说明还是比较抽象,下面我将以几个实战例子来帮 ...

  2. Java基础之Java8 新特性

    hp实训8.19_Java基础之Java8新特性 // 信息展示方法 ,接口中,就可以提供一种实现. 就可以使用这种功能.default void print() {System.out.printl ...

  3. java8中map的新方法--replace

    译者:kingviker Map在Java8中新增了两个replace的方法 1.replace(k,v) 在指定的键已经存在并且有与之相关的映射值时才会将指定的键映射到指定的值(新值) 在指定的键不 ...

  4. Java基础笔记-Java8及其他新特性

    第十六章 Java8及其他新特性 16.1 Java8新特性简介 16.2 lambda表达式和函数式接口 16.3 方法引用与构造器引用 16.4 StreamAPI的使用 16.5 Optiona ...

  5. Java8学习--Map的compute方法

    你只会用 map.put?试试 Java 8 compute ,操作 Map 更轻松! 今天栈长分享一个实用的 Java 8 开发技能,那就是 Map 接口中增加的 compute 方法,给 Map ...

  6. Java8中map与flatMap用法

    目录 1 概述 2 map与flatMap 3 常用写法 1 概述 Java8中一些新特性在平时工作中经常会用到,但有时候总感觉不是很熟练,今天特意将这个Java8中的映射记录一下. 2 map与fl ...

  7. java 循环读取map_java中map的循环遍历和map的获取值的办法

    Java中Map的遍历方式了,这个其实有点像php中数组了,下文整理了一些map的循环遍历和map的获取值的办法,希望能帮助到各位. map的循环遍历方式  代码如下 复制代码 package com ...

  8. Java基础 - 集合框架(5) : Map集合、Collections

    1. Map集合的概述和特点 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 2. Map和Collection的区别 ? A. Map 存储的是键值对形式的元素,键唯一,值 ...

  9. 【JAVA基础】java基础之-java8新特性

    写在前面的话 脑子是个好东西,可惜的是一直没有搞懂脑子的内存删除机制是什么,所以啊,入行多年,零零散散的文章看了无数,却总是学习了很多也忘了很多. 痛定思痛的我决定从今天开始系统的梳理下知识架构,记录 ...

最新文章

  1. 每日一皮:千万别和杠精一般见识...
  2. fatal: Unable to find remote helper for 'https'
  3. Python 获取项目根路径
  4. foreach_break 面试记录
  5. 怎样呵护友谊_【家校联动共同呵护孩子健康成长科普课堂】关爱学生心理健康,守护学生健康成长...
  6. oracle大型数据库系统在AIX/unix上的实战详解 讨论76 Oracle备份问题
  7. spring获取webapplicationcontext,applicationcontext几
  8. 智慧环卫、智慧公厕、智能抽样、综合指挥中心、质量监察、指挥调度、车辆监管、收运计划、垃圾中转站、考核管理、垃圾收运、机械化保洁作业、环卫作业、油耗空驶、环卫设施、人工保洁作业、稽查扣分、Axure
  9. [转]RamDisk导致远程桌面客户端无法启动问题
  10. 个人博客作业-Week2 (代码规范, 代码复审)
  11. 关于webstorm 弹出Clear Read-Only status
  12. ibm各种服务器visio图标vss文件,visio网络图标库vss大全
  13. windows 程序员计算器
  14. Unity Hub和Unity安装教程
  15. 什么是spurious wakeups(虚假唤醒)
  16. 英语作文中常见的连接词
  17. 【案例】某市规范性文件合法性审核信息管理系统和行政执法监督平台建设案例
  18. ExpandableListView 去掉默认箭头,设置成别的图片
  19. solidworks中加入参考图纸图片
  20. 二进制枚举:幼儿园买玩具

热门文章

  1. 中国历史和世界史横向对照表,收藏了长知识。 ​​​​
  2. Nginx 访问加密
  3. 【已解决】VS code源代码控制器显示5k+的修改文件
  4. 浙江大学计算机柳铮,预告 | 计算机学院第二十次研究生代表大会
  5. android 文字锯齿,android自定义view锯齿状效果
  6. 技术水平真的很重要!技术详细介绍
  7. nove6怎么升级鸿蒙系统,华为手机怎么升级鸿蒙,华为鸿蒙系统支持手机型号大全...
  8. kafka安装及配置
  9. 常见C++开源网站项目
  10. 跟风用Matlab画一棵圣诞树