技术开发 频道

看看JDK 8能给开发者们带来什么

  改进了集合的互动

  在我看来,所有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);
  

  新方法:

//.....
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);

  c. 如何从选定的集合中找出字符的数量:

// .....  

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

  d.如果要从集合中取出每个元素然后打印,该怎样做呢?

//旧方法:
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的时候。这将肯定会很有趣的一件事。

1
相关文章