随手记录第十二话 -- JDK8-21版本的新增特性记录(Lambda,var,switch,instanceof,record,virtual虚拟线程等)

news2025/1/15 18:44:00

本文主要用于记录jdk8以来的新增特性及使用方法!

1.Java8 Lambda表达式(8)

1.1 方法引用

		List<String> list = List.of("1", "2", "3");
        list.forEach(i -> System.out.println(i));
        //方法引用
        list.forEach(System.out::println);

1.2 接口支持默认方法

public interface MyTest {
    
    default void defaultMethod(){
        System.out.println("default Method");
    }
}

1.3 Stream API流式API

		List<String> list = List.of("1", "2", "3");
        //过滤再循环
        list.stream().filter(i -> !"1".equals(i)).forEach(System.out::println);
        //过滤再输出
        List<String> list1 = list.stream().filter(i -> !"1".equals(i)).toList();
        System.out.println(JSONObject.toJSONString(list1)); //["2","3"]
        //过滤再转map
        List<Map<String, Object>> list2 = list.stream().filter(i -> !"1".equals(i)).map(s -> {
            Map<String, Object> map = new HashMap<>();
            map.put("a_" + s, s);
            return map;
        }).toList();
        System.out.println(JSONObject.toJSONString(list2)); //[{"a_2":"2"},{"a_3":"3"}]
        //转类型
        List<Long> list3 = list.stream().map(Long::valueOf).toList();
        System.out.println(JSONObject.toJSONString(list3)); //[1,2,3]

1.4 Map新增且实用的方法

		Map<String, Integer> map = new HashMap<>();
        map.put("a", 1);
        map.put("b", 2);
        //foreach
        map.forEach((key, value) -> System.out.println(key + ": " + value));
        //getOrDefault 取值为空返回默认值
        int c = map.getOrDefault("c", 22);
        System.out.println(c); //22
        //replace 如果存在值替换当前key的值
        map.replace("b", 10);
        System.out.println(map); //{a=1, b=10}
        //替换时带匹配值
        map.replace("b", 10, 20);
        System.out.println(map); //{a=1, b=20}
        //replaceAll 可对每个key或者value做操作
        map.replaceAll((key, value) -> value + 1);
        System.out.println(map); //{a=2, b=21}
        //putIfAbsent key不存在才存入
        map.putIfAbsent("a", 11);
        map.putIfAbsent("c", 3);
        System.out.println(map); //{a=2, b=21, c=3}
        //computeIfAbsent 如果值不存在 则执行后面的函数
        map.computeIfAbsent("d", key -> 4);
        System.out.println(map); //{a=2, b=21, c=3, d=4}
        //computeIfPresent 如果存在且值非空 可重新计算
        map.computeIfPresent("b", (key, value) -> value + 10);
        System.out.println(map); //{a=2, b=31, c=3, d=4}
        //compute 使用函数计算存入
        map.compute("b", (key, value) -> (value == null) ? 40 : value + 1);
        map.compute("e", (key, value) -> (value == null) ? 40 : value + 1);
        System.out.println(map); //{a=2, b=32, c=3, d=4, e=40}
        //merge
        map.merge("b", 1, (oldValue, newValue) -> oldValue + newValue);
        System.out.println(map); //{a=2, b=33, c=3, d=4, e=40}

        //remove 当指定key和值时才删除
        map.remove("a", 1);
        System.out.println(map); //{a=2, b=33, c=3, d=4, e=40}
        map.remove("a", 2);
        System.out.println(map); //{b=33, c=3, d=4, e=40}

        //of ofEntries 快捷创建 但映射不可变
        Map<String, Integer> of = Map.of("a", 1, "b", 2);
        System.out.println(of); //{b=2, a=1}
        Map<String, Integer> ofEntries = Map.ofEntries(
                Map.entry("a",1),
                Map.entry("b",2)
        );
        System.out.println(ofEntries); //{b=2, a=1}
//        of.put("a",3); //不管新增删除还是修改 俊辉报错

2. java11 var httpClient相关(11)

		var list = List.of("1", "2", "3");
        list.forEach((var e) -> System.out.println(e));

        String str = " ";
        System.out.println(str.isBlank()); //true
        System.out.println(str.isEmpty()); //false

		//java.net.http
        JSONObject object = new JSONObject();
        object.put("fromId", 11234);
        var httpClient = HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(6)).build();
        HttpRequest httpRequest = HttpRequest.newBuilder(URI.create("http://192.168.168.199:9000/xxxxxx"))
        //post body请求
//                .setHeader("Content-Type","application/json; charset=utf-8")
//                .POST(HttpRequest.BodyPublishers.ofString(object.toJSONString()))
                .build();
        HttpResponse<String> httpResponse = httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString());
        System.out.println(httpResponse.body());


        //okhttp3 http请求
//        Request request = new Request.Builder()
//                .url(noticeUrl)
                .get()
//                .post(RequestBody.create(object.toJSONString(), MediaType.parse("application/json; charset=utf-8")))
//                .build();
//        Response response = Web3jUtils.httpClient.newCall(request).execute();
//        JSONObject jsonObject = JSONObject.parseObject(response.body().string());
//        log.warn("发现提现消息:{},{}", object.toJSONString(), jsonObject.toJSONString());

3.新表达式和模块匹配(12-15)

3.1 switch 多行文本 instanceof

		int day = 1;
        switch (day){
            case 2 -> System.out.println(false);
            case 1 -> System.out.println(true);
            default -> System.out.println("未知的!");
        }
		//多行文本
        String str = """
                text
                text
                """;

		//instanceof
        if(str instanceof String s1){
            System.out.println(s1.toUpperCase(Locale.ROOT));
        }

4.记录 密封类 虚拟线程(16-21)

  • 记录
public record Point(int x, int y) {}
  • 密封类
public abstract sealed class Shape permits Circle, Square {}
public final class Circle extends Shape {}
public final class Square extends Shape {}
  • 虚拟线程
Thread.ofVirtual().start(() -> {
    System.out.println("Hello from virtual thread");
});

//使用Executors 创建和管理
ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor();
for (int i = 0; i < 10; i++) {
    executor.submit(() -> {
        System.out.println("Hello from virtual thread!");
    });
}
executor.shutdown();

以上就是本文的全部内容了!

上一篇:随手记录第十一话 – PHP + yii2 初体验
下一篇:随手记录第十三话 – 关于Python自动化部署神器fabric的应用与差异

非学无以广才,非志无以成学。

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

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

相关文章

数据结构-1.初始包装类与泛型

本节目标:学习包装类与泛型为阅读java集合源码打下基础. 1.包装类 在 Java 中&#xff0c;由于基本类型不是继承自 Object &#xff0c;为了在泛型代码中可以支持基本类型&#xff0c; Java 给每个基本类型都对应了一个包装类型. 1.1基本数据类型对应包装类 基本数据类型包装类…

编码的理解

人类的文字信息由各种各样的符号构成 文字-----符号 这些符号是不能在磁盘或内存当中存储的&#xff0c;计算机最早是由老美发明出来的&#xff0c;内存和磁盘当中只有 0&#xff0c;1&#xff0c;严格来说内存和磁盘中只能表示整型&#xff0c;那么我们应该怎么表示符号----…

linux进程控制——进程替换——exec函数接口

前言&#xff1a; 本节内容进入linux进程控制板块的最后一个知识点——进程替换。 通过本板块的学习&#xff0c; 我们了解了进程的基本控制方法——进程创建&#xff0c; 进程退出&#xff0c; 进程终止&#xff0c; 进程替换。 进程控制章节和上一节进程概念板块都是在谈进程…

智算新风向丨趋动科技获中国信通院泰尔实验室首张智算资源池化能力泰尔测评证书

近日&#xff0c;趋动科技“OrionX AI算力资源池化软件”经中国泰尔实验室依据《FG-Z14-0172-01智算资源池化平台测试方案》评估测试&#xff0c;获得智算资源池化能力泰尔测评证书&#xff0c;成为该领域首个完成此评价的产品。 图1.OrionX通过智算资源池化平台评测 随着AI大…

智能巡检企业级域名 SSL 证书

一、概述 SSL 证书是一种数字证书&#xff0c;用于在用户和服务器之间建立加密链接&#xff0c;确保数据传输的安全性&#xff0c;防止数据在传输过程中被截获或篡改。SSL 证书不仅保护了数据传输过程中的隐私和完整性&#xff0c;还可以帮助验证网站的身份&#xff0c;防止钓…

基于SpringBoot+Vue的科研管理系统(带1w+文档)

基于SpringBootVue的科研管理系统(带1w文档) 基于SpringBootVue的科研管理系统(带1w文档) 科研的管理系统设计过程中采用Java开发语言,B/S结构&#xff0c;采取springboot框架&#xff0c;并以MySql为数据库进行开发。结合以上技术&#xff0c;对本系统的整体、数据库、功能模块…

鸿蒙系统开发【加解密算法库框架】安全

加解密算法库框架 介绍 本示例使用ohos.security.cryptoFramework相关接口实现了对文本文件的加解密、签名验签操作。 实现场景如下&#xff1a; 1&#xff09;软件需要加密存储本地文本文件&#xff0c;需要调用加解密算法库框架选择密钥文本文件&#xff0c;对本地文本文…

PostgreSQL11 | 触发器

本文章代码已在pgsql11.22版本上运行且通过&#xff0c;展示页由pgAdmin8.4版本提供 上一篇总结了原著的第十章有关pgsql的视图的用法&#xff0c;本篇将总结pgsql的触发器的用法。 触发器 使用触发器可以自动化完成一些在插入数据或修改数据时&#xff0c;某些需要同期同步的…

【vulnhub】Depth靶机

靶机安装 下载地址&#xff1a;https://download.vulnhub.com/depth/DepthB2R.ova 运行环境&#xff1a;VMware运行该虚拟机 信息收集 靶机IP发现 nmap 192.168.93.0/24 端口扫描 nmap -A 192.168.93.154 -p- 只开起了8080端口 进行目录扫描8080端口 dirsearch -u http…

学习记录(9):Prompt提示词技巧

依旧照例先感谢前辈们的慷慨分享 今天学习的是这篇文章↓ 原文&#xff1a;转自公主号“博金斯的AI笔记” —《4篇Prompt论文的提示词技巧, 3 个 GPTs 实例测试》 文章目录 一、提示词框架二、逻辑链&#xff08;Chain of thought&#xff09;三、思维树&#xff08;Tree of th…

华为Atlas 500 智能小站+鸿蒙AI大算力边缘计算解决方案

Atlas 500 智能小站鸿蒙大算力解决方案 技术规格 表3-1 技术规格 项目 说明 处理器 海思Hi3559A处理器 双核ARM Cortex A731.6GHz&#xff0c;32KB I-Cache&#xff0c;64KB D-Cache /512KB L2 cache双核ARM Cortex A531.2GHz&#xff0c;32KB I-Cache&#xff0c;32KB D-C…

如何确保PLC系统安全的可靠性,这几个注意事项你需要牢记

PLC&#xff08;可编程逻辑控制器&#xff09;是现代工业自动化系统中的关键组成部分。在设计 PLC 系统时&#xff0c;安全性是至关重要的考虑因素。本文将介绍 PLC 系统设计中的一些安全注意事项&#xff0c;包括电源设计、接地设计、关键数字量输入输出设计和报警设计。 一.…

阿一网络安全学院之绕过CDN发现服务器真实IP

方法一&#xff1a; 探测次级域名 方法二&#xff1a; 访问文件 使用访问错误目录获得报错信息成功 方法三&#xff1a; 去掉 www 查询 方法四&#xff1a; 使用网络测绘搜索引擎查询 和方法二获得的 IP 一样 方法五&#xff1a; 使用外国节点查询&#xff1a; 用了无数…

关于使用php的mpdf插件遇到的一些问题

一.插件版本 "mpdf/mpdf": "^8.0", 二.报错&#xff1a;Undefined index: list_style_type 这个是插件无法识别 li 标签导致&#xff0c;生成pdf是加入下面代码 <style> li { list-style-type: none; list-style-image: none; list-style-positi…

HTML-03.新浪新闻-标题-样式2

1.<span>标签 <span>是一个在开发网页时大量使用的没有语义的布局标签 特点&#xff1a;一行可以显示多个&#xff08;行内组合元素&#xff09;&#xff0c;宽度和高度默认由内容撑开 2.CSS选择器 2.1 元素选择器&#xff1a;标签名{...} 元素名称{ color:red; }…

如何在 Debian 上安装运行极狐GitLab Runner?【一】

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门面向中国程序员和企业提供企业级一体化 DevOps 平台&#xff0c;用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规&#xff0c;而且所有的操作都是在一个平台上进行&#xff0c;省事省心省钱。可以一键安装极狐GitL…

04-Fastjson反序列化漏洞

免责声明 本文仅限于学习讨论与技术知识的分享&#xff0c;不得违反当地国家的法律法规。对于传播、利用文章中提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;本文作者不为此承担任何责任&#xff0c;一旦造成后果请自行承担&…

ShardingSphere实战(5)- 读写分离

上篇博客&#xff0c;我们讲了 ShardingSphere实战&#xff08;4&#xff09;- 广播表和默认数据源 &#xff0c;这篇博客&#xff0c;我们实现一下读写分离。 一、读写分离配置 # sharding-jdbc 读写分离策略 # 给数据源起别名&#xff0c;这里名称需要和下面的一致 spring.…

【C++标准模版库】vector的介绍及使用

vector 一.vector的介绍二.vector的使用1.vector 构造函数2.vector 空间增长3.vector 增删查改4.vector 迭代器的使用1.正向迭代器2.反向迭代器 5.victor 迭代器失效问题&#xff08;重点&#xff09; 三.vector不支持 流提取与流插入四.vector存储自定义类型1.存储string2.存储…

OS_操作系统的运行环境

2024.06.11:操作系统的运行环境学习笔记 第3节 操作系统的运行环境 3.1 操作系统引导3.2 操作系统内核3.2.1 内核资源管理3.2.2 内核基本功能 3.3 CPU的双重工作模式3.3.1 CPU处于用户态&#xff08;目态&#xff09;3.3.2 CPU处于内核态&#xff08;管态&#xff09; 3.4 特权…