JDK11新特性

本文介绍了Java编程中的一些关键加强功能,如字符串操作的便捷性、集合和流的改进、Optional的使用、输入/输出流增强以及HTTPClient API的应用。通过实例展示了如何利用这些特性简化代码并提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Main {

    public static void main(String[] args) throws IOException, InterruptedException {
        test2();
    }

    // 1、局部变量类型推断
    public static void test1(){
        Arrays.asList("Java", "Python", "Ruby")
                .forEach((var s) -> {
                    System.out.println("Hello, " + s);
                });
    }

    // 2、字符串加强
    public static void test2(){
        var str = " kingsoft";
        var isblank = str.isBlank();  //判断字符串是空白
        var isempty = str.isEmpty();  //判断字符串是否为空
        var  result1 = str.strip();    //首位空白
        var  result2 = str.stripTrailing();  //去除尾部空白
        var  result3 = str.stripLeading();  //去除首部空白
        var  copyStr = str.repeat(2);  //复制几遍字符串
        var  lineCount = str.lines().count();  //行数统计

        System.out.println(isblank);
        System.out.println(isempty);
        System.out.println(result1);
        System.out.println(result2);
        System.out.println(result3);
        System.out.println(copyStr);
        System.out.println(lineCount);
    }

    // 3、集合加强
    public static void test3(){
        var list1 = List.of("Java", "Python", "C");
        var copy1 = List.copyOf(list1);
        System.out.println(list1 == copy1); // true
        var list2 = new ArrayList<String>();
        var copy2 = List.copyOf(list2);
        System.out.println(list2 == copy2); // false
    }

    // 4、Stream加强
    public static void test4(){
        // 增加单个构造方法,可为null
        long count = Stream.ofNullable(null).count();
        System.out.println(count);     // 0
        // 增加 takeWhile 方法,从Stream依次获取元素,不满足则退出
        List<Integer> collect1 = Stream.of(10, 8, 3, 6, 7, 8)
                .takeWhile(n -> n % 2 == 0)
                .collect(Collectors.toList());
        System.out.println(collect1);   // [10, 8]
        // 增强 dropWhile 方法,从Stream依次删除元素,不满足则退出
        List<Integer> collect2 = Stream.of(10, 8, 3, 6, 7, 8)
                .dropWhile(n -> n % 2 == 0)
                .collect(Collectors.toList());
        System.out.println(collect2);   // [3, 6, 7, 8]
    }

    // 5、Optional 加强
    public static void test5(){
        String javastack = Optional.of("javastack").orElseThrow();// javastack
        long javastack1 = Optional.of("javastack").stream().count();// 1
        Object javastack2 = Optional.ofNullable(null)
                .or(() -> Optional.of("javastack"))
                .get();// javastack
        System.out.println(javastack);
        System.out.println(javastack1);
        System.out.println(javastack2);
    }

    // 6、InputStream 加强
    public static void test6() throws IOException {
        var classLoader = ClassLoader.getSystemClassLoader();
        var inputStream = classLoader.getResourceAsStream("javastack.txt");
        var javastack = File.createTempFile("javastack2", "txt");
        try (var outputStream = new FileOutputStream(javastack)) {
            inputStream.transferTo(outputStream);
        }

    }

    // 7、HTTP Client API
    public static void test7() throws IOException, InterruptedException {
        var request = HttpRequest.newBuilder()
                .uri(URI.create("https://javastack.cn"))
                .GET()
                .build();
        var client = HttpClient.newHttpClient();
        // 同步
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.body());
        // 异步
        client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
                .thenApply(HttpResponse::body)
                .thenAccept(System.out::println);
    }

    // 8、读写文件
    public static void test8() throws IOException {
        Files.writeString(
                Path.of("./", "tmp.txt"), // 路径
                "hello, jdk11 files api", // 内容
                StandardCharsets.UTF_8); // 编码
        String s = Files.readString(
                Paths.get("./tmp.txt"), // 路径
                StandardCharsets.UTF_8); // 编码
    }

    // 9、单文件代码
    public static void test9(String[] args){
        if ( args == null || args.length < 1 ){
            System.err.println("Name required");
            System.exit(1);
        }
        System.out.println(String.format("Hello %s!!", args[0]));
        /**
         *  PS G:\samples\java11\single-file> java HelloGreeting.Java sana
         *  Hello sana!!
         * */
    }




}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值