大量的教程和文章涵盖了Java 8中最重要的变化,如lambda表达式和函数流。但是,JDK 8 API中的许多现有类已经通过有用的特性和方法得到了增强。
本文介绍了Java 8 API中的一些较小的更改 - 每个更改都使用易于理解的代码示例进行描述。让我们深入研究字符串,数字,算术和文件。
字符串切片
String类有两种新方法:join和chars。第一种方法将任意数量的字符串连接到具有给定分隔符的单个字符串:
String.join(":", "foobar", "foo", "bar");
// => foobar:foo:bar
第二种方法chars为字符串的所有字符创建一个流,因此您可以对这些字符使用流操作:
"foobar:foo:bar"
.chars()
.distinct()
.mapToObj(c -> String.valueOf((char)c))
.sorted()
.collect(Collectors.joining());
// => :abfor
现在不仅字符串而且正则表达式模式都受益于流。我们可以为任何模式拆分字符串,并创建一个要处理的流,而不是将字符串拆分为每个字符的流,如下例所示:
Pattern.compile(":")
.splitAsStream("foobar:foo:bar")
.filter(s -> s.contains("bar"))
.sorted()
.collect(Collectors.joining(":"));
// => bar:foobar
另外,可以将正则表达式模式转换为谓词。这些谓词可用于过滤字符串流:
Pattern pattern = Pattern.compile(".*@gmail\\.com");
Stream.of("bob@gmail.com", "alice@hotmail.com")
.filter(pattern.asPredicate())
.count();
// => 1
上述模式接受任何以字符结尾的字符串,@gmail.com然后用作Java 8 Predicate来过滤电子邮件地址流。
数字运算
Java 8为使用无符号数字添加了额外的支持。Java中的数字一直都是签名的。我们来看看Integer例如:
int最多可表示
2
32