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 ...
随机推荐
- SQL简单使用指南
SQL简单使用指南 SQL(结构化查询语言)是一种用于管理和操作关系型数据库的标准化语言. 数据库概述 数据库是用于存储和组织数据的结构.它由表(表格)组成,每个表都包含多个列和行.以下是SQL中最常 ...
- 《Python魔法大冒险》006 变量的迷雾
小鱼和魔法师走了很久,终于来到了一个神秘的森林前.这片森林与众不同,它被一层厚厚的迷雾所包围,仿佛隐藏着无尽的秘密. 小鱼好奇地看着这片森林:"这是什么地方?" 魔法师:这是魔法森 ...
- 钉钉旧版服务端SDK支持异步方法的升级改造
最近项目中需要对接钉钉,有些钉钉 API 的访问需要使用旧版服务端 SDK 才能搞定,但是这个 SDK 使用的还是 .NET Framework 2.0 框架,不能跨平台部署,也不支持 async\a ...
- warning in ./src/router/index.js (Emitted value instead of an instance of Error) Error compiling template: Uncaught (in promise) TypeError: Cannot set properties of undefined (setting 'jsoninfo'
目录 warning in ./src/router/index.js (Emitted value instead of an instance of Error) Error compiling ...
- 其它——paramiko模块的使用
文章目录 paramiko 一 介绍 二 通过用户名密码方式远程执行命令 三 通过用户名密码方式上传下载文件 四 通过公钥私钥远程执行命令 五 通过公钥私钥远程上传下载文件 六 通过私钥字符串远程连接 ...
- Django框架——forms组件、cookie与session
文章目录 1 forms 组件 1 校验字段功能 2 渲染标签功能 渲染方式1 渲染方式2 渲染方式3 3 渲染错误信息功能 视图 模板 4 组件的参数配置 5 局部钩子 6 全局钩子 2 cooki ...
- Android news Display Owner Info on Your Android Device in Case It Gets Lost
Display Owner Info on Your Android Device in Case It Gets Lost The latest versions of Android includ ...
- 文心一言 VS 讯飞星火 VS chatgpt (111)-- 算法导论10.2 2题
二.用go语言,用一个单链表 L实现一个栈.要求操作 PUSH和 POP 的运行时间仍为 O(1). 文心一言: 在 Go 语言中,我们可以用结构体来实现一个单链表,然后再用栈的相关操作. 以下是一个 ...
- 如何在 Vue.js 中引入原子设计?
本文为翻译文章,原文链接: https://medium.com/@9haroon_dev/introducing-atomic-design-in-vue-js-a9e873637a3e 前言 原子 ...
- Vue之style的用法
Vue中style的用法总结如下: v-bind:style 简写:style 1.基本用法 <!DOCTYPE html> <html lang="en"&g ...