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!!
* */
}
}