Java 12(于2019年3月19日发布)是JDK的最新版本。让无涯教程看看它为开发人员和建筑师带来的新函数和改进。
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.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。
有时,想确定两个文件是否具有相同的内容。该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语句,以便可以用作语句或表达式。
不必为每个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。
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)