package com.lp.javafeature;
import jdk.incubator.foreign.MemoryAddress;
import jdk.incubator.foreign.MemoryHandles;
import jdk.incubator.foreign.MemorySegment;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.lang.invoke.VarHandle;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.channels.FileChannel;
import java.nio.file.Path;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
public class Java {
public static void main(String[] args) {
// write your code here
}
/**
* Java21
*/
public static void java21() {
/**
* èæçº¿ç¨
* JDKå¨å°æ°æä½ç³»ç»çº¿ç¨ä¸è¿è¡ä»£ç ï¼å¯è½åªæä¸ä¸ªçº¿ç¨ã
*
* 示ä¾ï¼å建 10000个线ç¨ï¼ç¶åé½ä¼ç 1 ç§éç»æçº¿ç¨ï¼å¦æä½¿ç¨ä¼ ç»ç Thread 线ç¨ï¼å¯è½ä¼å ä¸ºçº¿ç¨æ°éä¸å¤èç´æ¥å¼å¸¸ã
* 妿æ¯çº¿ç¨æ± çæ¹å¼ï¼ä¼åºäºçº¿ç¨æ± ççº¿ç¨æ°å¹¶åï¼é£ä¹å©ä½çº¿ç¨åªè½çå¾
ï¼ä½æ¯ä½¿ç¨èæçº¿ç¨çæ¹å¼ï¼å¯ä»¥ç¬é´å®æã
*/
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
IntStream.range(0, 10_000).forEach(i -> {
executor.submit(() -> {
Thread.sleep(Duration.ofSeconds(1));
return i;
});
});
} // executor.close() 被éå¼è°ç¨ï¼å¹¶çå¾
/**
* https://www.wdbyte.com/java/java-21/
*/
}
/**
* Java17
*/
public static void java17() {
// nothing
}
/**
* Java16
*/
public static void java16() {
/**
* Collectors.teeing()
* teeing æ¶éå¨å·²å
¬å¼ä¸ºéææ¹æ³Collectors::teeingã该æ¶éå¨å°å
¶è¾å
¥è½¬åç»å
¶ä»ä¸¤ä¸ªæ¶éå¨ï¼ç¶åå°å®ä»¬çç»æä½¿ç¨å½æ°åå¹¶ã
*/
List list = Arrays.asList(
new Student("åä¸", 55),
new Student("åäº", 60),
new Student("åä¸", 90));
//å¹³åå æ»å
String result = list.stream().collect(Collectors.teeing(
Collectors.averagingInt(Student::getScore),
Collectors.summingInt(Student::getScore),
(s1, s2) -> s1 + ":" + s2));
//æä½å æé«å
String result2 = list.stream().collect(Collectors.teeing(
Collectors.minBy(Comparator.comparing(Student::getScore)),
Collectors.maxBy(Comparator.comparing(Student::getScore)),
(s1, s2) -> s1.orElseThrow() + ":" + s2.orElseThrow()
));
System.out.println(result);
System.out.println(result2);
/**
* æ·»å Stream.toListæ¹æ³
*/
List list = Arrays.asList("1", "2", "3");
//ä¹åè¿æ ·å
List oneList = list.stream()
.map(Integer::parseInt)
.collect(Collectors.toList());
//ç°å¨å¯ä»¥è¿æ ·å
List twoList = list.stream()
.map(Integer::parseInt)
.toList();
}
/**
* Java15
*/
public static void java15() {
// https://stackoverflow.com/questions/64188082/what-is-the-point-of-a-sealed-interface-in-java
// https://www.it610.com/article/1290457869514252288.htm
}
public sealed class Airport permits PrintingAirport {
// ...
}
/**
* Java14
*/
public static void java14() {
UserDTO user = new UserDTO("1697301681936888","空æ ","https://juejin.cn/user/1697301681936888");
System.out.println(user.id);
System.out.println(user.nickname);
System.out.println(user.id);
memoryOperation();
}
public record UserDTO(String id,String nickname,String homepage) { };
public static void memoryOperation() {
try {
// åé
200B å å¤å
å
MemorySegment memorySegment = MemorySegment.allocateNative(200);
// ç¨ ByteBuffer åé
ï¼ç¶åå
è£
为 MemorySegment
MemorySegment memorySegment2 = MemorySegment.ofByteBuffer(ByteBuffer.allocateDirect(200));
// MMAP å½ç¶ä¹å¯ä»¥
MemorySegment memorySegment3 = MemorySegment.mapFile(
Path.of("/tmp/memory.txt"), 0, 200, FileChannel.MapMode.READ_WRITE);
// è·åå å¤å
åå°å
MemoryAddress address = MemorySegment.allocateNative(100).address();//baseAddress();
// ç»åæ³ï¼å å¤åé
ï¼å å¤èµå¼
long value = 10;
MemoryAddress memoryAddress = MemorySegment.allocateNative(8).address();//baseAddress();
// è·å奿
VarHandle varHandle = MemoryHandles.varHandle(long.class, ByteOrder.nativeOrder());
varHandle.set(memoryAddress, value);
// 鿾就è¿ä¹ç®åï¼æ³æ³ DirectByteBuffer çéæ¾â¦â¦å¤å¥æª
memorySegment.close();
} catch (IOException e) {
}
}
/**
* Java13
*/
public static void java13() {
DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();
var typeOfDay = switch (dayOfWeek) {
case MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY -> "Working Day";
case SATURDAY, SUNDAY -> {
yield "Working Day";
}
};
// String json = "{\"id\":\"1697301681936888\",\"nickname\":\"空æ \",\"homepage\":\"https://juejin.cn/user/1697301681936888\"}";
String json = """
{
"id":"1697301681936888",
"nickname":"空æ ",
"homepage":"https://juejin.cn/user/1697301681936888"
}
""";
}
/**
* Java12
*/
public static void java12() {
DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();
var typeOfDay = switch (dayOfWeek) {
case MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY -> "Working Day";
case SATURDAY, SUNDAY -> "Day Off";
};
Object obj = "Hello Java 12!";
if (obj instanceof String str) {
int length = str.length();
}
}
/**
* Java11
*/
public static void java11() {
List languages = Arrays.asList("Java", "Groovy");
String language = languages.stream()
.map((var x) -> x.toUpperCase())
.collect(Collectors.joining(", "));
assert(language).equals("Java, Groovy");
}
/**
* Java10
*/
public static void java10() {
var message = "hello";
var i = 13;
var b = false;
var ss = new int[]{1, 2, 3};
}
/**
* Java9
*/
public static void java9() throws IOException {
//
List integers = new ArrayList() {
public void handle() {
System.out.println("");
}
};
//
BufferedReader br = new BufferedReader(new InputStreamReader(new InputStream() {
@Override
public int read() throws IOException {
return 0;
}
}));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new OutputStream() {
@Override
public void write(int b) throws IOException {
}
}));
try(br; bw) {
}
//
interface InterfacePrivateMethodTest {
default void wrapMethod() {
innerMethod();
}
private void innerMethod() {
System.out.println("interface private method...");
}
}
}
}