Java8新特性之-Map
Map一些新方法的具体使用案例
1、getOrDefault:default V getOrDefault(Object key, V defaultValue)
package com.qbb.threadpool;
import java.util.HashMap;
import java.util.Map;
/**
* @author QiuQiu&LL (个人博客:https://www.cnblogs.com/qbbit)
* @version 1.0
* @date 2022-07-23 11:49
* @Description:
*/
public class Java8NewFeature {
public static void main(String[] args) {
Map<String,String> map = new HashMap<>();
map.put("name", "qiuqiu");
map.put("age", "22");
map.put("hobby", "haha");
map.put("interest", "no");
/**
* getOrDefault
*/
String orDefaultValue = getOrDefaultTest(map);
System.out.println("orDefaultValue = " + orDefaultValue);
}
/**
* getOrDefault
* 如果Map中不存在该key,可以提供一个默认值,方法会返回改默认值。
* 如果存在该key,返回键对应的值
*/
public static String getOrDefaultTest(Map<String,String> map){
String orDefault = map.getOrDefault("qiu", "baoabo");
return orDefault;
}
}

2、forEach:default void forEach(BiConsumer<? super K, ? super V> action)
/**
* forEach
* 遍历map
*/
public static String forEachTest(Map<String, String> map) {
/**
* 以前的写法
*/
for (Map.Entry<String, String> entry : map.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key + "===" + value);
}
/**
* 现在的写法
*/
map.forEach((k, v) -> System.out.println(k + "===" + v));
/**
* 还可以做一些中间操作
*/
map.forEach((k, v) -> {
System.out.println(k + "===" + v);
v = v + "you";
map.put(k, v);
});
map.forEach((k, v) -> System.out.println(k + "===" + v));
return null;
}

3、putIfAbsent:default V putIfAbsent(K key, V value)
/**
* putIfAbsent
* V putIfAbsent(K key, V value)只有在不存在key值的映射或者映射值为null,才将value值赋值给key。
* 否则不做修改。该方法将条件判断和赋值合二为一。
*/
public static String putIfAbsentTest(Map<String, String> map) {
String result1 = map.put("name", "ll");
System.out.println("result1 = " + result1);
String result2 = map.putIfAbsent("name", "qiuqiu");
System.out.println("result2 = " + result2);
String name = map.get("name");
System.out.println("name = " + name);
String absent = map.putIfAbsent("hello", "qiuqiu");
System.out.println("absent = " + absent);
String hello = map.get("hello");
System.out.println("hello = " + hello);
return null;
}

4、compute:default V compute(K key,BiFunction<? super K, ? super V, ? extends V> remappingFunction)
default V compute(K key,
BiFunction<? super K, ? super V, ? extends V> remappingFunction) {
Objects.requireNonNull(remappingFunction);
// 获取key对应的值
V oldValue = get(key);
//获取新值
V newValue = remappingFunction.apply(key, oldValue);
// 如果新值为null,并且key存在,则删除key;否则把新值赋值给key
if (newValue == null) {
// delete mapping
if (oldValue != null || containsKey(key)) {
// something to remove
remove(key);
return null;
} else {
// nothing to do. Leave things as they were.
return null;
}
} else {
// add or replace old mapping
put(key, newValue);
return newValue;
}
}
5、computeIfAbsent:default V computeIfAbsent(K key,Function<? super K, ? extends V> mappingFunction)
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("name", "qiuqiu");
map.put("age", "22");
map.put("hobby", "haha");
map.put("interest", "no");
/*
当Map中不存在key值的映射或映射值为null时,调用mappingFunction,
并在mappingFunction执行结果非null时,将结果赋值给key。
*/
String ifAbsent = map.computeIfAbsent("qiuqiu", k -> {
return "hello:" + k;
});
System.out.println("ifAbsent = " + ifAbsent);
}

6、merge:default V merge(K key, V value,BiFunction<? super V, ? super V, ? extends V> remappingFunction)
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("name", "qiuqiu");
map.put("age", "22");
map.put("hobby", "haha");
map.put("interest", "no");
/**
* value和remappingFunction不能为null
* 如果Map中key对应的映射不存在或者为null,
* 则将value关联到key上;否则执行remappingFunction,
* 如果执行结果为null则删除key的映射,否则用该结果跟key关联。
*/
// 给存在的key进行映射处理
String merge = map.merge("name", "ll", (k, v) -> {
System.out.println(k + "===" + v);
return k + v;
});
System.out.println("merge = " + merge);
// 给不存在的key,不会执行
String result = map.merge("haha", "ll", (k, v) -> {
System.out.println(k + "===" + v);
return k + v;
});
System.out.println("map.get(haha) = " + map.get("haha"));
System.out.println("result = " + result);
}
7、remove(key,value):default boolean remove(Object key, Object value)
/**
* remove
* 只有在当前Map中key映射的值等于value时才删除该映射,否则什么也不做。
*/
public static String removeTest(Map<String, String> map) {
boolean flag = map.remove("name", "qiuqiu");
System.out.println("flag = " + flag);
boolean flag2 = map.remove("hobby", "ll");
System.out.println("flag2 = " + flag2);
return null;
}

8、replace:default boolean replace(K key, V oldValue, V newValue)
/**
* replace
*/
public static String replaceTest(Map<String, String> map){
String one = map.replace("name", "haha");
System.out.println("one = " + one);
String two = map.replace("haha", "hehe");
System.out.println("two = " + two);
boolean flag = map.replace("name", "haha", "hehe");
System.out.println("flag = " + flag);
return null;
}

9、replaceAll:default void replaceAll(BiFunction<? super K, ? super V, ? extends V> function)
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("name", "qiuqiu");
map.put("age", "22");
map.put("hobby", "haha");
map.put("interest", "no");
map.replaceAll((k, v) -> {
// 对 k v 进行处理
if ("hobby".equals(k)) {
return v.toUpperCase();
}
return v;
});
// 打印
map.forEach((k, v) -> System.out.println(k + "=" + v));
}

当然还有其他的方法就不一一列举了,大家可以去试一下
Java8新特性之-Map的更多相关文章
- Java8 新特性 Streams map() 示例
在Java 8中stream().map(),您可以将对象转换为其他对象.查看以下示例: 1.大写字符串列表 1.1简单的Java示例将Strings列表转换为大写. TestJava8.java p ...
- java8新特性:对map集合排序
一.简单介绍Map 在讲解Map排序之前,我们先来稍微了解下map,map是键值对的集合接口,它的实现类主要包括:HashMap, TreeMap, Hashtable以及LinkedHashMap等 ...
- java8新特性全面解析
在Java Code Geeks上有大量的关于Java 8 的教程了,像玩转Java 8--lambda与并发,Java 8 Date Time API 教程: LocalDateTime和在Java ...
- Java8新特性
Java8新特性 Java8主要的新特性涵盖:函数式接口.Lambda 表达式.集合的流式操作.注解的更新.安全性的增强.IO\NIO 的改进.完善的全球化功能等. 1.函数式接口 Java 8 引入 ...
- Java8 新特性之Stream----java.util.stream
这个包主要提供元素的streams函数操作,比如对collections的map,reduce. 例如: int sum = widgets.stream() .filter(b -> b.ge ...
- 这可能是史上最好的 Java8 新特性 Stream 流教程
本文翻译自 https://winterbe.com/posts/2014/07/31/java8-stream-tutorial-examples/ 作者: @Winterbe 欢迎关注个人微信公众 ...
- Java8新特性(一)_interface中的static方法和default方法
什么要单独写个Java8新特性,一个原因是我目前所在的公司用的是jdk8,并且框架中用了大量的Java8的新特性,如上篇文章写到的stream方法进行过滤map集合.stream方法就是接口Colle ...
- Java8 新特性 | 如何风骚走位防止空指针异常
文章整理翻译自 https://winterbe.com/posts/2015/03/15/avoid-null-checks-in-java/ 文章首发于个人网站: https://www.exce ...
- 干货 | Java8 新特性教程
本教程翻译整理自 https://github.com/winterbe/java8-tutorial 本教程首发自个人网站: https://www.exception.site/java8/jav ...
- Java8新特性之Collectors
参考:Java8新特性之Collectors 在第二天,你已经学习了Stream API能够让你以声明式的方式帮助你处理集合.我们看到collect是一个将管道流的结果集到一个list中的结束操作.c ...
随机推荐
- Jmeter读取结果文件报错Error loading results file解决方法
最近在项目性能测试过程中,遇到jmeter读取jtl文件出错的问题,如下图所示: 方法一:修改配置文件 将要读取结果文件的组件Configure界面配置都勾选上,默认情况下有些选项没勾选会出错. 第一 ...
- MAUI+Masa Blazor APP 各大商店新手发布指南(三)vivo篇
目录 前言 准备材料 审核流程 测试报告 隐私测试报告 隐私行为数据 其他问题 总结 前言 上架vivo商店,使用厂家的离线推送当然是一个重要原因,与小米不同,vivo的推送服务可以在应用未上架的情况 ...
- C++ 学习笔记、01 | 开发简单职工管理系统遇到的一些问题
记录开发简单职工管理系统遇到的一些问题,黑马教程 https://www.bilibili.com/video/BV1et411b73Z P147 ~ P166 头文件与源文件 头文件只声明,源文件来 ...
- HOMER7配置告警
概述 HOMER是一款100%开源的针对SIP/VOIP/RTC的抓包工具和监控工具. HOMER是一款强大的.运营商级.可扩展的数据包和事件捕获系统,是基于HEP/EEP协议的VoIP/RTC监控应 ...
- Django框架项目之项目基础——项目介绍、需求分析、pip安装源、环境搭建、前台、后台、跨域请求
文章目录 1 路飞学城 1.1 企业的web项目类型 1.2 企业项目开发流程 1.3 立项申请阶段 2. 需求分析 2.1 首页 2.2 登录注册 2.3 课程列表 2.4 课程详情 2.5 购物车 ...
- 为什么 Rust 备受开发者青睐?
引子 作为一名敏锐的前端开发者,您可能早已对 Rust 有所耳闻,毕竟近几年,使用 Rust 开发的前端构建工具每经发布,其卓越的性能数据总是能带来社区的一阵惊叹. 图片来源:https://swc. ...
- 深入了解 GPU 互联技术——NVLINK
随着人工智能和图形处理需求的不断增长,多 GPU 并行计算已成为一种趋势.对于多 GPU 系统而言,一个关键的挑战是如何实现 GPU 之间的高速数据传输和协同工作.然而,传统的 PCIe 总线由于带宽 ...
- linux 查找命令(whatis,free,df,top)
whatis whatis命令是用于查询一个命令执行什么功能,并将查询结果打印到终端上,等同于 man -f: # whatis grep grep (1) - print lines matchin ...
- C# ref, in, out关键字
写在前面:大内老A的这篇"老生常谈:值类型VS引用类型"放在微信收藏里好几个月了,终于趁着要讲JAVA传参机制的时候仔细地按照这篇博客,自己写代码跑一下,对C#的传参,ref,in ...
- Unity - UIWidgets 2. 控件组合
UIWidgets没有提供完整文档, 称可以去看Flutter的文档 中文 \ 英文 控件(Control)在Flutter中称为"Widget", 一个界面的若干控件是通过wid ...