爽呀,JDK17里面可以使用的神仙语法(一)

平台奖励创作,可能会升级VIP文章,可以移步我的公众号:【编程朝花夕拾】,且可获取首发内容。

01 引言

从JDK8升级到JDK17,里面新增了有很多神仙级的语法,用起来非常丝滑,看起来也更加清爽。下来我们详细了解一下。

02 神仙语法

2.1 集合工厂方法

快速创建不可变集合的方法,该方法是来自JDK9的功能。

JDK9之前初始化不可变集合的方法:

// 通过Arrays创建不可变集合
List<Integer> list = Arrays.asList(1, 2, 3, 4, 1);

SetMap集合没有对应的方法,通过添加的方式或者通过第三方的方式,如guava

// JDK 原生写法
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(3);

Map<String, String> map = new HashMap<>();
map.put("1", "1");
map.put("2", "2");

// guava 工具类
Set<Integer> set = Sets.newHashSet(1,2,3);
......

使用JDK9以后得写法:

// 直接可以使用JDK方法
List<Integer> list = List.of(1, 2, 3, 4);
Set<Integer> set = Set.of(1, 2, 3, 4);
Map<String, String> map = Map.of("1", "1", "2", "2");

是不是看起来清爽多了,无需第三方依赖。但是需要注意的事,这里是不可变集合,无法新增或删除集合元素,如果操作会出现如下报错:

2.2 改进 Stream API

流处理里面的条件开关,该方法同样来自JDK9的功能。

takeWhile(): 依次取出满足条件的集合数据,直到碰到第一个元素不满足条件时停止。

dropWhile(): 依次剔除满足条件的集合数据,直到碰到第一个元素不满足条件时开始取出数据。

案例:依次取出数据,直到第一个元素大于3停止

List.of(1,2,3,4,2)

JDK9之前的写法:

List<Integer> list = List.of(1, 2, 3, 4, 2);
for (Integer item : list) {
    if (item > 3) {
        break;
    }
    System.out.println(item);
}
// 打印结果:1,2,3

JDK9之后的写法:

List<Integer> list = List.of(1, 2, 3, 4, 2);
list.stream().takeWhile(item -> item <= 3).forEach(System.out::println);
// 打印结果:1,2,3

案例:依次剔除数据,直到第一个元素大于3开始获取数据

List.of(1,2,3,4,2)

JDK9之前的写法:

List<Integer> list = List.of(1, 2, 3, 4,2);
boolean flag = false;
for (Integer item : list) {
    if (item > 3) {
        flag =  true;
    }
    if (flag) {
        System.out.println(item);
    }
}
// 打印结果:4,2

JDK9之后的写法:

List<Integer> list = List.of(1, 2, 3, 4,2);
list.stream().dropWhile(item -> item <= 3).forEach(System.out::println);
// 打印结果:4,2

2.3 文本块

支持多行字符串("""..."""),简化 JSON/HTML 编写,以及支持格式化。这个是笔者最喜欢的语法。在大数据领域里面scala语言中简直不要太爽。该方法来自JDK15。

JDK15之前的多长字符串的写法需要自己拼接,使用了多上字符串的语法就可以保持格式。

// JDK15 之前的写法
String htm = "<!DOCTYPE html>";
htm += "<html lang=\"en\">";
htm += "<body>测试</body>";
htm += "</html>";
System.out.println(htm);

System.out.println("------------");

// JDK15 之后的写法
String html = """
            <html lang="en">
                <body>测试</body>
            </html>
        """;
System.out.println(html);

看看打印的效果:

变量替换更简洁:

假设我们要替换文本的一个变量。以前的使用的String.format()。如今语更加简洁,使用String.formatted()方法。

String context = "文本块";
String htm = "<!DOCTYPE html>";
htm += "<html lang=\"en\">";
htm += "<body>测试,%s</body>";
htm += "</html>";
System.out.println(String.format(htm, context));

System.out.println("----------");

String html = """
            <html lang="en">
                <body>测试,%s</body>
            </html>
        """;
System.out.println(html.formatted(context));

效果如下:

2.4 Switch 箭头表达式

因为JDK8引入的Lamda表达式,箭头函数的用法开始在JAVA界普及,让人爱不释手。现在Switch 在JDK14里面正式支持。

一起看看前后的变化吧

// JDK14之前的写法
int str = RandomUtil.randomInt(5);
switch (str) {
    case 1:
        System.out.println("1");
    case 2:
        System.out.println("2");
    case 3:
        System.out.println("3");
    default:
        System.out.println("default");
}

// JDK14之后的写法
int str = RandomUtil.randomInt(5);
switch (str) {
    case 1 -> System.out.println("1");
    case 2 -> System.out.println("2");
    case 3 -> System.out.println("3");
    default -> System.out.println("default");
}

是不是清爽了很多,代码行数也减少了。

03 小结

从JDK8到JDK17新增的语法有很多,我会分几期挑选出比较有意思或者好用的语法,简单说明。我们下期见。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智_永无止境

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值