Java12 - 新功能

Java12 - 新功能 首页 / Java入门教程 / Java12 - 新功能

Java 12(于2019年3月19日发布)是JDK的最新版本。让无涯教程看看它为开发人员和建筑师带来的新函数和改进。

Collectors.teeing()

Teeing集合已通过静态方法 Collectors::teeing 创建。在将其结果与函数合并之前,此收集器将其输入转发给其他两个收集器。

teeing(Collector,Collector,BiFunction)接受两个收集器和一个函数来合并其结果。传递给结果收集器的每个元素均由两个下游收集器处理,然后使用指定的合并函数将其结果合并为最终结果。

例如,在给定的雇员列表中,如果想找出最高薪水和最低薪水的雇员,则可以使用发球台收集器在单个语句中完成。

SalaryRange salaryRange = Stream
            .of(56700, 67600, 45200, 120000, 77600, 85000)
            .collect(teeing(
                    minBy(Integer::compareTo), 
                    maxBy(Integer::compareTo), 
                    SalaryRange::fromOptional));

了解更多信息: Collectors.teeing()

String API 

String.indent()  -  缩进方法有助于更改字符串的缩进。可以传递一个正值或一个负值,具体取决于无涯教程要添加更多的空白还是要删除现有的空白。

String result = "foo\nbar\nbar2".indent(4);

System.out.println(result);

//    foo
//    bar
//    bar2

请注意,indent()方法会自动添加换行符(如果尚未提供)。

每个空格字符都被视为一个字符。特别是,制表符"\t"(U + 0009 )被视为单个字符;

 String.transform()   -  transform()方法采用 String 并将其转换为新的字符串函数

在给定的示例中,有一个名称列表。正在使用 transform()方法执行两个操作(修剪空白并使所有名称都大写)。

 List<String> names = List.of("   Alex",
		            	"brian");

List<String> transformedNames = new ArrayList<>();

for (String name : names) 
{
    String transformedName = name.transform(String::strip).transform(StringUtils::toCamelCase);

    transformedNames.add(transformedName);
}

String constants     -    从Java 12开始, String 类实现了两个附加接口 java.lang.constant.Constable java.lang.constant.ConstantDesc

String 类还引入了两个附加的低层方法 describeConstable() resolveConstantDesc(MethodHandles.Lookup)

它们是低层API,适用于提供字节码解析和生成函数的库和工具,例如Byte Buddy。

Files.mismatch

有时,想确定两个文件是否具有相同的内容。该API有助于比较文件的内容。

mismatch()方法比较两个文件路径并返回 long 值。长号表示两个文件内容中第一个不匹配字节的位置。如果文件相等,则返回值为'-1'

Path helloworld1 = tempDir.resolve("helloworld1.txt");

Path helloworld2 = tempDir.resolve("helloworld2.txt");

long diff = Files.mismatch(helloworld1, helloworld2);	//returns long value

数字格式化

用户界面或命令行工具提供的大量数字始终很难解析。使用数字的缩写形式更为常见。紧凑的数字表示形式更易于阅读,并且在屏幕上所需的空间更少,而不会丢失原始含义。

例如。 3.6M 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

Switch表达式

此更改扩展了switch语句,以便可以用作语句或表达式。

不必为每个case块定义 break 语句,无涯教程只需使用箭头语法。箭头语法在语义上看起来像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。

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

从0开始学架构 -〔李运华〕

玩转Spring全家桶 -〔丁雪丰〕

深入浅出计算机组成原理 -〔徐文浩〕

微信小程序全栈开发实战 -〔李艺〕

To B市场品牌实战课 -〔曹林〕

etcd实战课 -〔唐聪〕

程序员的个人财富课 -〔王喆〕

深入浅出分布式技术原理 -〔陈现麟〕

大厂设计进阶实战课 -〔小乔〕

好记忆不如烂笔头。留下您的足迹吧 :)