改进了集合的互动
在我看来,所有lambda工程的改变都是对语言的极大补充,这将会使本语言与当前标准对齐,使其更简单、更简洁,但是这些改变可能使得本语言有最大的效率影响和最大的酷+哇效应,进而使集合框架将会有彻底的改造。但是,这没有集合2框架的概念,我们现在依然必须去做类型探险处理,但是JAVA将有其他重要方面的改变:从外部到内部的迭代。如此,它提供开发者的机制去过滤和用一个优雅的方式去聚合集合,除此之外,还提高了效率。通过提供lambda表达式,将会在内部被执行,这样,就可以充分利用多核处理器的功能了。
让我们考虑以下场景
a.假如有一个字符串列表,选择该列表的所有对象然后转换成大写字母。这该如何写呢?
旧方法如下:
//.....
List inputList = new LinkedList<>();
List upper = new LinkedList<>();
// add elements
for (String currentValue : inputList) {
if (currentValue != null && currentValue.matches("*")) {
upper.add(currentValue);
}
}
System.out.println(upper);
List inputList = new LinkedList<>();
List upper = new LinkedList<>();
// add elements
for (String currentValue : inputList) {
if (currentValue != null && currentValue.matches("*")) {
upper.add(currentValue);
}
}
System.out.println(upper);
新方法:
//.....
inputList.stream().filter(x -> (x != null && x.matches("[A-Z0-9]*"))).into(upper);
inputList.stream().filter(x -> (x != null && x.matches("[A-Z0-9]*"))).into(upper);
b.假如你想要把所有提取的字符转换成小写字母。用JDK8的方法做将会像如下这样做:
/ .....
inputList.stream().filter(x -> (x != null && x.matches("[A-Z0-9]*"))).map(String::toLowerCase).into(upper);
inputList.stream().filter(x -> (x != null && x.matches("[A-Z0-9]*"))).map(String::toLowerCase).into(upper);
c. 如何从选定的集合中找出字符的数量:
// .....
int sumX = inputList.stream().filter(x -> (x != null && x.matches("[A-Z0-9]*"))).map(String::length).reduce(0, Integer::sum);
int sumX = inputList.stream().filter(x -> (x != null && x.matches("[A-Z0-9]*"))).map(String::length).reduce(0, Integer::sum);
用到的方法:
default Stream stream() // java.util.Collection
Stream filter(Predicate predicate) // java.util.stream.Stream
IntStream map(IntFunction mapper) //java.util.stream.Stream
Stream filter(Predicate predicate) // java.util.stream.Stream
IntStream map(IntFunction mapper) //java.util.stream.Stream
d.如果要从集合中取出每个元素然后打印,该怎样做呢?
//旧方法:
for (String current : list) {
System.out.println(current);
}
//新方法:
list.forEach(x -> System.out.println(x));
for (String current : list) {
System.out.println(current);
}
//新方法:
list.forEach(x -> System.out.println(x));
除了以上提到的功能外,JDK8还有其他有趣的新功能,但为了简洁篇幅,在此不做介绍。更多关于JDK8的信息可以在JDK8 [a href="http://jdk8.java.net/lambda/"]的lambda项目或者 JSR 337网页上得到。
总而言之,Java正在不断地改进,我个人喜欢它未来的方向,另外一个喜欢的点就是当类库开发人员开始采用JDK 8的时候。这将肯定会很有趣的一件事。