Java8新特性之Stream-Map

news2024/9/17 8:57:08

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;
    }
}

image

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;
    }

image

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;
    }

image

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);
    }

image

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;
    }

image

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;
    }

image

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));
    }

image

当然还有其他的方法就不一一列举了,大家可以去试一下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1962388.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣高频SQL 50题(基础版)第三十四题

文章目录 力扣高频SQL 50题&#xff08;基础版&#xff09;第三十四题1978.上级经理已离职的公司员工题目说明实现过程准备数据实现方式结果截图 力扣高频SQL 50题&#xff08;基础版&#xff09;第三十四题 1978.上级经理已离职的公司员工 题目说明 表: Employees -------…

论文阅读:基于生物神经元的模拟游戏世界感知与学习

论文内容概述 AI要90分钟学会的游戏&#xff0c;人脑细胞竟在5分钟搞定了。Cell在2022年的研究中&#xff0c;使用80万体外神经元细胞(DishBrain)竟然学会玩70年代经典街机游戏Pong&#xff01; 论文链接&#xff1a;In vitro neurons learn and exhibit sentience when emb…

HCIA总结

一、情景再现&#xff1a;ISP网络为学校提供了DNS服务&#xff0c;所以&#xff0c;DNS服务器驻留在ISP网络内&#xff0c;而不再学校网络内。DHCP服务器运行在学校网络的路由器上 小明拿了一台电脑&#xff0c;通过网线&#xff0c;接入到校园网内部。其目的是为了访问谷歌网站…

ctfshow 权限维持 web670--web679

web670 <?php// 题目说明&#xff1a; // 想办法维持权限&#xff0c;确定无误后提交check&#xff0c;通过check后&#xff0c;才会生成flag&#xff0c;此前flag不存在error_reporting(0); highlight_file(__FILE__);$a$_GET[action];switch($a){case cmd:eval($_POST[c…

2024年技校云计算实验室建设及云计算实训平台整体解决方案

随着信息技术的飞速发展&#xff0c;云计算已成为推动数字化转型的关键力量。技校作为培养技能型人才的摇篮&#xff0c;建设云计算实验室并配套完善的实训平台&#xff0c;对于提升学生的专业技能、增强就业竞争力具有重要意义。本文旨在提出2024年技校云计算实验室建设及云计…

列表内容过多卡顿?有索引栏如何实现滚动加载?

&#x1f453;写在前面 很多小伙伴可能在开发业务中会遇到这种问题&#xff0c;数据列表过多&#xff0c;造成dom一次性渲染卡顿&#xff0c;本文主要介绍滚动加载&#xff0c;实现在有索引栏的列表中使用滚动加载的方法。 本文技术栈使用的是vue2vant2&#xff0c;其他框架组…

letcode - string

翻转字符串 344. 反转字符串 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/reverse-string/ class Solution { public:void reverseString(vector<char>& s) {reverse(s.begin(),s.end());//直接上逆置接口} }; 函数签名: void reverseStr…

CVPR 2024 录用数据出炉!这些方向是大趋势!

一年一度的计算机视觉和模式识别会议&#xff08;CVPR&#xff09;一直是 CV 界前沿研究的灯塔。 CVPR 2024 录用结果显示&#xff0c;今年共有 2719 篇论文被接收&#xff0c;录用率 23.6%。 那么大模型时代&#xff0c;今年的研究主题有哪些变化&#xff1f; 最近&#xf…

【Python】 ValueError: too many values to unpack 解决方案

【Python】 ValueError: too many values to unpack 解决方案 在Python编程中&#xff0c;ValueError: too many values to unpack是一个常见的错误&#xff0c;通常出现在使用解包操作时。本文将深入探讨这个错误的原因、解决思路、解决方法&#xff0c;并通过具体案例帮助大…

【Python学习手册(第四版)】学习笔记09.3-Python对象类型-分类、引用VS拷贝VS深拷贝、比较、相等、真假值等详解

个人总结难免疏漏&#xff0c;请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习、研究交流。 这部分稍杂&#xff0c;视需要选择目录读取。 主要讲的是对之前的所有对象类型作复习&#xff0c;以通俗易懂、由浅入深的方式进行介绍&#xff0c;所有对象类型…

『康之泉活水馆』手游:打造夏日梦幻水世界

设计背景 夏日的热浪与城市的喧嚣困扰着忙碌奔波的人群&#xff0c;康之泉活水馆&#xff0c;作为多功能的室内水上乐园&#xff0c;以其独特的魅力&#xff0c;成为夏日避暑的理想之地&#xff0c;让身心得以彻底放松。 设计理念 优联前端以康之泉品牌IP形象“康康”为灵感&a…

[GYCTF2020]FlaskApp (pin码,jinja2绕过注入)

题目就是flask 下面是判断模版注入的方法 a{*comment*}b和{{7*7}}base64编码后解码都报错no&#xff0c;无法判断模版引擎 直接用下jinja2的试一试&#xff0c;把编码后的密文拿去解码&#xff0c;payload&#xff1a; {{"".__class__mro(2)__subclasses__()}} 报…

英文文献翻译方法哪个好?高效率的翻译方法分享

三伏天的酷热也抵挡不住学术人探索知识的脚步&#xff0c;阅读和翻译英文文献几乎已经成为了许多研究者和学者的日常。然而在面对浩如烟海的英文资料时&#xff0c;如何高效准确地进行翻译&#xff0c;成为了亟待解决的问题。 今天我便挖掘到了5款实用的英文文献翻译工具&…

4.1.1、操作系统的概述

操作系统的作用:通过资源管理提高计算机系统的效率;改善人机界面向用户提供友好的工作环境。 操作系统的特征:并发性、共享性、虚拟性、不确定性。 操作系统的功能:进程管理、存储管理、文件管理、设备管理、作业管理。 操作系统的分类:批处理操作系统、分时操作系统(轮流使…

美股:苹果选择谷歌芯片支持人工智能技术

最近的研究报告显示&#xff0c;苹果公司在其新一代人工智能工具和功能套件中选择依赖谷歌设计的芯片&#xff0c;而非市场领导者 Nvidia。这一决定引发了业界的关注&#xff0c;尤其是考虑到Nvidia在人工智能处理器市场的主导地位。 谷歌云的TPU在苹果的AI基础设施中发挥关键作…

计算机再过几年会没落?

大部分人卷的计算机&#xff1a;Java web 实际上的计算机&#xff1a;web&#xff0c;图形学&#xff0c;Linux系统开发&#xff0c;一系列嵌入式开发&#xff0c;数据库&#xff0c;高性能服务器&#xff0c;中间件开发&#xff0c;三维建模&#xff0c;网络安全&#xff0c;…

vue2 封装弹框组件

安装 element-ui npm install element-ui --save ---force main.js 导入 import Vue from vue; import ElementUI from element-ui; import element-ui/lib/theme-chalk/index.css; import App from ./App.vue; Vue.use(ElementUI); new Vue({ el: #app, render: h > h(Ap…

Minio、MySQL、Redis、Milvus 安装

CPU&#xff1a;2核↑&#xff0c;内存&#xff1a;4GB↑ 开发工具&#xff1a;eclipse-jee、MySQL Workbench、MobaXterm、Redis Insight... 操作系统&#xff1a;CentOS Stream 9&#xff08;生产环境&#xff09;、Windos 11 Ubuntu 22.04.3&#xff08;开发环境&#xf…

使用 Kibana 和 Vega 构建高级可视化

作者&#xff1a;来自 Carly Richmond 为了解释在 Kibana 中构建 Vega 可视化的基础知识&#xff0c;我将使用此 GitHub 存储库中的 2 个示例。具体来说&#xff0c;我将介绍&#xff1a; 使用 Elasticsearch 聚合进行数据采购轴和标记事件和信号&#xff08;例如工具提示和更…

工具使用备忘录

npm npm是node包管理工具。yarn是npm的替代品&#xff0c;看起来使用更加广泛。cnpm是中国镜像。 cnpm安装时&#xff0c;曾经出现过错误。不进行安全验证后运行成功。 目前在WSL上可以全局使用cnpm 当时解决的方案是将报错信息copy下来&#xff0c;直接看通义千问的结果。 …