Java9集合类新增功能

前言

Java8及Java9在集合Collection类中新增了一些很好用的新方法,能方便程序员更便捷的处理集合数据,本文对其中的一些方法进行总结

一. List

请添加图片描述

1.创建

        // 传统方法List<String> list1 = new ArrayList<>();list1.add("item1");list1.add("item2");//方法2-子类List<String> list2 = new ArrayList<String>() {{add("item1");add("item2");}};//方法3:Arrays.asList()罗列元素,不可增删,但可更改List<String> list3 = Arrays.asList("item1", "item2");//方法4:Java9以上新增,不可增删改List.of("item1", "item2");

2.更新

        //replaceAll()对元素进行批量替换,本例为在原每个元素String后面增加三个星号list1.replaceAll(item -> item + "***");            //更新原List,对象类型不变,所以入参应为Operator:T->TSystem.out.println(list1);

3.判断条件式移除

        //removeIf() 满足条件则移除list1.removeIf(item -> item.contains("2"));         //过滤掉含有“2”的元素,list发生改变System.out.println(list1);

4. 遍历

        //foreach()循环元素每个对象,放入Customer方法中消费list1.forEach(System.out::println);

二. Set

请添加图片描述

        //Set工厂, Java9提供Set<String> set = Set.of("item1", "item2");

三. Map

请添加图片描述

1.创建

        //Map工厂,Java9提供,以key、value的格式依次设置参数Map<String, String> map1 = Map.of("key1", "value1", "key2", "value2");//以Map.entry()格式来创建key、valueMap<String, Integer> map2 = Map.ofEntries(Map.entry("key1", 1),Map.entry("key2", 2),Map.entry("key3", 3));

2. 替换更新replace()/replaceAll()

        //replace()条件替换String key1 = "key1";boolean replace = map.replace(key1, 1, 3);System.out.println("key5执行computeIfPresent后,结果值:" + map.get(key1));     //执行结果:5,上面的replace没有生效//replaceAll()全量替换map.replaceAll((key, value)-> value + 2);System.out.println("key5执行computeIfPresent后,结果值:" + map);           //执行结果:value都增加了2

3.判断条件移除remove()

        /*  remove(key, value): 当map中对应的key->value值时,才会被remove;会结合value一起进行判断 */String key2 = "key2";boolean remove = map.remove(key2, 2);       //此时key2已经被改为4,因此remove不生效System.out.println("移除结果:" + remove);   //执行结果:falseremove = map.remove(key2, 4);System.out.println("移除结果:" + remove);   //此次执行结果:true

4. 遍历forEach()

        //forEach() 以Entry方式来遍历map.forEach((key, value) -> {System.out.println("key=" + key + ", value=" + value);});

5. 排序

        /*用流的方式进行排序*///sorted() 按某种条件排序Stream<Map.Entry<String, Integer>> stream = map.entrySet().stream();//按照value排序,类似的还有Map.Entry.comparingByKeyStream<Map.Entry<String, Integer>> stream1 = stream.sorted(Map.Entry.comparingByValue());System.out.println("Map.Entry.comparingByValue 进行排序:");stream1.forEachOrdered(System.out::println);

6. 带默认值获取getOrDefault()

       /*  从map中取值,若取不到则返回默认值 */String key4 = "key4";Integer value4 = map.getOrDefault(key4, 14);     //取key,如果取不到则返回第二个参数,默认值System.out.println("getOrDefault执行后,得到的结果:" + value4);      //执行结果:14

7. computer计算

    /*** 先定义一个生成value的方法*/public int createValue(String key) {String substring = key.substring(3);System.out.println("== createValue方法创建value值,key=" + key);return Integer.valueOf(substring);}public void computerTest() {/*  computeIfAbsent(): 指定的键没有对应的值,则使用该键计算新的值, 并添加到Map中 */Integer value4 = map.computeIfAbsent(key4, this::createValue);    //执行此步骤可以看到value为createValue()执行了,有内部日志打印出来System.out.println("computeIfAbsent执行后,结果值:" + value4);     //可以看到value4的结果为:4System.out.println("map现在可以取值:" + map.get(key4));           //直接查询map也能得到结果:4// 如果指定的键在map中已有,那么直接取值,不会再调用方法参数创建新值。Integer value4Again = map.computeIfAbsent(key4, this::createValue);    //执行此步骤,没有createValue()方法内部日志打印出来System.out.println("再次执行computeIfAbsent,结果值:" + value4Again);  //执行结果:4/*  computeIfPresent(): 指定的键有对应的值,则使用该键计算新的值, 并添加到Map中 *///定义的BiFunction,可以把原数据的key-value都传入,计算新valueBiFunction<String, Integer, Integer> add10Function = (key, value) -> value + 5;Integer computeIfPresent2 = map.computeIfPresent(key4, add10Function);      //因为key4已有值,所以会被重算System.out.println("Key4执行computeIfPresent后,结果值:" + computeIfPresent2);     //执行结果:9//若不存在,则不执行,返回null;因为key5在map中没有对应value,所以没有计算String key5 = "key5";Integer value5 = map.computeIfPresent(key5, add10Function);            System.out.println("key5执行computeIfPresent后,结果值:" + value5);     //执行结果:null}

8. 合并

        /*merge() 合并两个map,会根据key以及给出的方法做整合*/Map<String, Integer> map = new HashMap<>(Map.ofEntries(Map.entry("key1", 5),Map.entry("key2", 2),Map.entry("key3", 3)));Map<String, Integer> map2 = new HashMap<>(Map.ofEntries(Map.entry("key1", 1),Map.entry("key2", 2),Map.entry("key5", 3)));//将map2合并入map中map2.forEach((k, v) -> map.merge(k, v, (v1, v2) -> v1 + v2));System.out.println(map);           //{key1=6, key2=4, key5=3, key3=3} ,以key为基准,做了合并

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FPGA实验一:层次法设计组合电路(加法器)

目录 一、实验目的 二、实验要求 三、实验代码 四、实验结果及分析 1、引脚锁定 2、仿真波形及分析 3、下载测试结果及分析 五、实验心得 一、实验目的 &#xff08;1&#xff09;掌握基本组合逻辑电路的 FPGA实现&#xff1b; &#xff08;2&#xff09;学习 Verilo…

烂sql导致clickhouse集群memory_tracking直线飙升触发熔断

版 本 v e r s i o n 1 9 . 1 7 . 4 . 1 1 c l i c k h o u s e 集 群 &#xff0c; 主 要 存 日 志 数 据 与 监 控 数 据 。 架 构 为 4 台 主 机 1 2 个 实 例 数 &#xff0c; 数 据 为 单 副 本 。 近 日 &#xff0c; 该 c l i c k h o u s e 集 群 有 一 台 物…

Leetcode 数据库刷题记录

https://leetcode-cn.com/problemset/database/ 题目都是leetcode 上的可以点击题目会有相应的链接 每道题后面都应相应的难度等级&#xff0c;如果没时间做的话 可以在leetcode 按出题频率刷题&#xff0c;答案仅供参考 175. 组合两个表 难度简单 SQL架构 表1: Person ---…

深入理解什么是端口(port)

每当看到有人的简历上写着熟悉 TCP/IP, HTTP 等协议时, 我就忍不住问问他们: 你给我说说, 端口是啥吧! 可惜, 很少有人能说得让人满意… 所以这次就来谈谈 端口(port) , 这个熟悉的陌生人. 在此过程中, 还会谈谈 间接层, naming service 等概念, IoC, 依赖倒置 等原则以及 TCP …

服务器配置静态IP

服务器配置静态IP 一、前期准备二、配置静态IP 将服务器配置为使用静态IP地址。这将使服务器拥有一个永久的IP地址&#xff0c;而不会在每次启动时更改。为此&#xff0c;您需要编辑网络配置文件并将服务器的IP地址添加到其中。详细步骤如下&#xff1a; 一、前期准备 请在配置…

一篇搞懂socket、websocket、http协议及其使用

socket 介绍socket之前先看小编的这篇文章报文、报文段、数据包、帧、比特、字符、字节&#xff0c;与编码 在网络传输中数据都是经过多层封装的&#xff0c;在协议簇中最低层次为传输层才可以传输数据。再往底层就是面向计算机硬件和网络的部分了。例如常使用的ping baidu.co…

查看windows上的dll内容

1、安装Visual Studio时选择c桌面开发和通用Windows平台开发 2、cmd运行在Visual Studio安装路径下的VC\Auxiliary\Build\vcvars64.bat 3、在这个窗口中运行dumpbin

【JVM内存模型】—— 每天一点小知识

&#x1f4a7; J V M 内存模型 \color{#FF1493}{JVM内存模型} JVM内存模型&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云的博客&#x1f390; &#x1f433; 《数据结构与算法》专栏的文章图文并茂&#x…

如何修改Jupyter Notebook的默认目录和默认浏览器

一、修改默认目录 Jupyter Notebook的文件默认保存目录是C:\Users\Administrator&#xff0c;默认目录可在黑窗口中查看&#xff0c;如下图所示&#xff1a; 为了方便文档的管理&#xff0c;可将默认目录修改成自己想保存的地方。修改方法如下&#xff1a; 1、找到config文件 …

迅为RK3568开发板Buildroot 系统自启动 QT 程序

本小节将讲解如何开机自启动 QT 程序。 在设置自启动 QT 程序之前&#xff0c;首先要编译好 QT 可执行程序&#xff0c;完成以下两步。 1、 已经根据 03_【北京迅为】itop-3568 开发板快速使用编译环境 ubuntu18.04 v1.0.doc 第 10 章节进行了 QT 程序的交叉编译 2、 将交叉…

SpringCloud(2) 注册中心Eureka、Nacos

目录 1.背景2.Eureka 注册中心3.Nacos 注册中心4.常见面试题1&#xff09;服务注册和发现是什么意思&#xff1f;Spring Cloud 如何实现服务注册发现&#xff1f;2&#xff09;Nacos 和 Eureka 有什么区别&#xff1f; 1.背景 注册中心是微服务中必须要使用的组件&#xff0c;…

PCL点云处理之细小空洞填补 (一百九十八)

PCL点云处理之细小空洞填补 (一百九十八) 一、算法介绍二、具体实现1.代码2.结果一、算法介绍 点云扫描过程中,由于遮挡或其他原因,可能存在一些细小空洞,有可能造成数据处理上一些问题,这里介绍一种填补细小空洞的方法。具体方法和效果如下所示 二、具体实现 1.代码…