测试必学:探秘大厂全链路质量保障体系
download:网盘链接
Java12新特性及代码示例
teeing 搜集器已公開爲静態辦法Collectors::teeing。該搜集器將其輸入轉發給其他兩個搜集器,然後將它們的結果運用函數兼並。
teeing(Collector, Collector, BiFunction)承受兩個搜集器和一個兼並其結果的函數。傳送給結果搜集器的每個元素都由兩個下游搜集器處置,然後運用指定的兼並函數將它們的結果兼並到最終結果中。
例如,在給定的學生列表中,假如我們想找出學生均匀分/總分/最低分/最高分,我們能夠運用 teeing collector 在單個语句中完成。
package cn.dayangshuo.collectors;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
/**
-
@author DAYANG
*/
public class TeeingTest {
public static void main(String[] args) {
List list = Arrays.asList(
new Student(“張三”, 96),
new Student(“李四”, 98),
new Student(“大陽”, 82));
//均匀分 總分
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);
}
static class Student {
private String name;
private Integer score;
public Student(String name, Integer score) {
this.name = name;
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getScore() {
return score;
}
public void setScore(Integer score) {
this.score = score;
}
@Override
public String toString() {
return “Student{” +
“name=’” + name + ‘’’ +
“, score=” + score +
‘}’;
}
}
}
- 字符串 API 變卦
2.1 字符串缩進
indent 辦法有助於更改字符串的缩進。我們能夠傳送正值或負值,詳細取決於我們是要添加更多空格還是删除現有空格。
String result = “foo\nbar\nbar2”.indent(4);
System.out.println(result)
// foo
// bar
// bar2
2.2. transform()
字符串轉換辦法,看代码:
List names = List.of(
" Alex",
“brian”);
List transformedNames = new ArrayList<>();
for (String name : names) {
String transformedName = name.transform(String::strip)
.transform(StringUtils::toCamelCase);
transformedNames.add(transformedName);
}
2.3. 字符串常量
從 Java 12 開端,String類完成了兩個額外的接口java.lang.constant.Constable和java.lang.constant.ConstantDesc。
String類還引入了兩個額外的低級辦法describeConstable()和resolveConstantDesc(MethodHandles.Lookup).
它們是低級 API,用於提供字節码解析和生勝利能的庫和工具,例如 Byte Buddy。
請留意,Constable類型是其值是能夠在 Java 類文件的常量池中表示的常量,如JVMS 4.4中所述,並且其實例能夠名義上將本人描绘爲ConstantDesc.
resolveConstantDesc()與此相似,describeConstable()不同之處在於此辦法返回的是 C 的實例onstantDesc。
- Files.mismatch(path, path)
有時,我們想肯定兩個文件能否具有相同的内容。此 API 有助於比擬文件的内容。
mismatch()辦法比擬兩個文件途径並返回一個long值。long 表示兩個文件内容中第一個不匹配字節的位置。’–1’假如文件“相等”,則返回值。
Path helloworld1 = tempDir.resolve(“helloworld1.txt”);
Path helloworld2 = tempDir.resolve(“helloworld2.txt”);
long diff = Files.mismatch(helloworld1, helloworld2);
4.緊湊數字格式
由用戶界面或命令行工具呈現的大量數字總是難以解析。運用數字的缩寫方式更爲常見。緊湊的數字表示更容易阅讀並且在屏幕上需求更少的空間而不會失去原始含義。
例如3.6 M比3,600,000更容易阅讀。
Java 12 引入了一種名爲NumberFormat.getCompactNumberInstance(Locale, NumberFormat.Style)的便利辦法,用於創立緊湊的數字表示。
NumberFormat formatter = NumberFormat.getCompactNumberInstance(Locale.US,NumberFormat.Style.SHORT);
String formattedString = formatter.format(25000L); ``//25K
5. 支持 Unicode 11
在表情符號在社交媒體渠道交流中發揮關键作用的時期,支持最新的 Unicode 標準比以往任何時分都愈加重要。Java 12 堅持同步並支持 Unicode 11。
Unicode 11 增加了 684 個字符,總共 137,374 個字符 - 以及 7 個新脚本,總共 146 個脚本。
6.切換表達式(預览)
此更改擴展了switch 语句以便它能夠用作语句或表達式。
不用爲break每個 case 塊定義一個语句,我們能夠简單地運用箭頭语法。箭頭语法在语義上看起來像一個 lambda,並將 case 標簽與表達式分開。
運用新的 switch 表達式,我們能夠直接將 switch 语句分配給變量。
boolean isWeekend = switch (day) {
case MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY -> false;
case SATURDAY, SUNDAY -> true;
default -> throw new IllegalStateException("Illegal day entry :: " + day);
};
System.out.println(isWeekend); //true or false - based on current day
要運用此預览功用,我們必需在應用程序啟動期間運用–enable-preview標誌明白指示 JVM。