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的更多相关文章

  1. Java8 新特性 Streams map() 示例

    在Java 8中stream().map(),您可以将对象转换为其他对象.查看以下示例: 1.大写字符串列表 1.1简单的Java示例将Strings列表转换为大写. TestJava8.java p ...

  2. java8新特性:对map集合排序

    一.简单介绍Map 在讲解Map排序之前,我们先来稍微了解下map,map是键值对的集合接口,它的实现类主要包括:HashMap, TreeMap, Hashtable以及LinkedHashMap等 ...

  3. java8新特性全面解析

    在Java Code Geeks上有大量的关于Java 8 的教程了,像玩转Java 8--lambda与并发,Java 8 Date Time API 教程: LocalDateTime和在Java ...

  4. Java8新特性

    Java8新特性 Java8主要的新特性涵盖:函数式接口.Lambda 表达式.集合的流式操作.注解的更新.安全性的增强.IO\NIO 的改进.完善的全球化功能等. 1.函数式接口 Java 8 引入 ...

  5. Java8 新特性之Stream----java.util.stream

    这个包主要提供元素的streams函数操作,比如对collections的map,reduce. 例如: int sum = widgets.stream() .filter(b -> b.ge ...

  6. 这可能是史上最好的 Java8 新特性 Stream 流教程

    本文翻译自 https://winterbe.com/posts/2014/07/31/java8-stream-tutorial-examples/ 作者: @Winterbe 欢迎关注个人微信公众 ...

  7. Java8新特性(一)_interface中的static方法和default方法

    什么要单独写个Java8新特性,一个原因是我目前所在的公司用的是jdk8,并且框架中用了大量的Java8的新特性,如上篇文章写到的stream方法进行过滤map集合.stream方法就是接口Colle ...

  8. Java8 新特性 | 如何风骚走位防止空指针异常

    文章整理翻译自 https://winterbe.com/posts/2015/03/15/avoid-null-checks-in-java/ 文章首发于个人网站: https://www.exce ...

  9. 干货 | Java8 新特性教程

    本教程翻译整理自 https://github.com/winterbe/java8-tutorial 本教程首发自个人网站: https://www.exception.site/java8/jav ...

  10. Java8新特性之Collectors

    参考:Java8新特性之Collectors 在第二天,你已经学习了Stream API能够让你以声明式的方式帮助你处理集合.我们看到collect是一个将管道流的结果集到一个list中的结束操作.c ...

随机推荐

  1. Jmeter读取结果文件报错Error loading results file解决方法

    最近在项目性能测试过程中,遇到jmeter读取jtl文件出错的问题,如下图所示: 方法一:修改配置文件 将要读取结果文件的组件Configure界面配置都勾选上,默认情况下有些选项没勾选会出错. 第一 ...

  2. MAUI+Masa Blazor APP 各大商店新手发布指南(三)vivo篇

    目录 前言 准备材料 审核流程 测试报告 隐私测试报告 隐私行为数据 其他问题 总结 前言 上架vivo商店,使用厂家的离线推送当然是一个重要原因,与小米不同,vivo的推送服务可以在应用未上架的情况 ...

  3. C++ 学习笔记、01 | 开发简单职工管理系统遇到的一些问题

    记录开发简单职工管理系统遇到的一些问题,黑马教程 https://www.bilibili.com/video/BV1et411b73Z P147 ~ P166 头文件与源文件 头文件只声明,源文件来 ...

  4. HOMER7配置告警

    概述 HOMER是一款100%开源的针对SIP/VOIP/RTC的抓包工具和监控工具. HOMER是一款强大的.运营商级.可扩展的数据包和事件捕获系统,是基于HEP/EEP协议的VoIP/RTC监控应 ...

  5. Django框架项目之项目基础——项目介绍、需求分析、pip安装源、环境搭建、前台、后台、跨域请求

    文章目录 1 路飞学城 1.1 企业的web项目类型 1.2 企业项目开发流程 1.3 立项申请阶段 2. 需求分析 2.1 首页 2.2 登录注册 2.3 课程列表 2.4 课程详情 2.5 购物车 ...

  6. 为什么 Rust 备受开发者青睐?

    引子 作为一名敏锐的前端开发者,您可能早已对 Rust 有所耳闻,毕竟近几年,使用 Rust 开发的前端构建工具每经发布,其卓越的性能数据总是能带来社区的一阵惊叹. 图片来源:https://swc. ...

  7. 深入了解 GPU 互联技术——NVLINK

    随着人工智能和图形处理需求的不断增长,多 GPU 并行计算已成为一种趋势.对于多 GPU 系统而言,一个关键的挑战是如何实现 GPU 之间的高速数据传输和协同工作.然而,传统的 PCIe 总线由于带宽 ...

  8. linux 查找命令(whatis,free,df,top)

    whatis whatis命令是用于查询一个命令执行什么功能,并将查询结果打印到终端上,等同于 man -f: # whatis grep grep (1) - print lines matchin ...

  9. C# ref, in, out关键字

    写在前面:大内老A的这篇"老生常谈:值类型VS引用类型"放在微信收藏里好几个月了,终于趁着要讲JAVA传参机制的时候仔细地按照这篇博客,自己写代码跑一下,对C#的传参,ref,in ...

  10. Unity - UIWidgets 2. 控件组合

    UIWidgets没有提供完整文档, 称可以去看Flutter的文档 中文 \ 英文 控件(Control)在Flutter中称为"Widget", 一个界面的若干控件是通过wid ...