JDK各个版本的新特性jdk1.5-jdk8

文章链接:JDK各个版本的新特性jdk1.5-jdk8

不过最有用的是java的lambda表达式,还有stream的运用,以及map和reduce。一篇文章就够了。厉害。 

jdk8新特性(部分)

  • 接口可以添加默认方法,default;
  • lambda表达式,对于接口可以直接用()->{}方式来表达,小括号表示方法入参,花括号内表示方法返回值,如Collections的sort()方法:

Collections.sort(names, (String a, String b) -> {
    return b.compareTo(a);
});
Collections.sort(names, (String a, String b) -> b.compareTo(a));
Collections.sort(names, (a, b) -> b.compareTo(a));
  • 函数式接口,@FunctionalInterface, 将lambda表达式映射到一个单方法的接口上
  • 方法和构造函数的引用,可以使用::,如Integer::valueOf
  • lambda表达式访问外层作用域和老版本的匿名对象中的方式很像,可以直接访问标记了final的外层局部变量,或者实例的字段以及静态变量。
  • java.util.Stream 表示能应用在一组元素上一次执行的操作序列。Stream 操作分为中间操作或者最终操作两种,最终操作返回一特定类型的计算结果,而中间操作返回Stream本身,这样你就可以将多个操作依次串起来。

Stream 的创建需要指定一个数据源,比如 java.util.Collection的子类,List或者Set, Map不支持。Stream的操作可以串行执行或者并行执行。


//Filter 过滤
stringCollection
    .stream()
    .filter((s) -> s.startsWith("a"))
    .forEach(System.out::println);

//Sort 排序
stringCollection
    .stream()
    .sorted()
    .filter((s) -> s.startsWith("a"))
    .forEach(System.out::println);
//排序只创建了一个排列好后的Stream,而不会影响原有的数据源,排序之后原数据stringCollection是不会被修改的; 


//Map 映射
//中间操作map会将元素根据指定的Function接口来依次将元素转成另外的对象,下面的示例展示了将字符串转换为大写字符串

stringCollection
    .stream()
    .map(String::toUpperCase)
    .sorted((a, b) -> b.compareTo(a))
    .forEach(System.out::println);
    
//Match 匹配
//Stream提供了多种匹配操作,允许检测指定的Predicate是否匹配整个Stream。所有的匹配操作都是最终操作,并返回一个boolean类型的值
boolean anyStartsWithA = 
    stringCollection
        .stream()
        .anyMatch((s) -> s.startsWith("a"));

boolean allStartsWithA = 
    stringCollection
        .stream()
        .allMatch((s) -> s.startsWith("a"));


boolean noneStartsWithZ = 
    stringCollection
        .stream()
        .noneMatch((s) -> s.startsWith("z"));
        
//Count 计数
//计数是一个最终操作,返回Stream中元素的个数,返回值类型是long
long startsWithB = 
    stringCollection
        .stream()
        .filter((s) -> s.startsWith("b"))
        .count();

//Reduce 规约
//这是一个最终操作,允许通过指定的函数来讲stream中的多个元素规约为一个元素,规越后的结果是通过Optional接口表示的
Optional<String> reduced =
    stringCollection
        .stream()
        .sorted()
        .reduce((s1, s2) -> s1 + "#" + s2);
    reduced.ifPresent(System.out::println);
  • java.time下包含了全新的时间日期API
  • 支持多重注解

参考这里

posted @ 2017-08-21 17:07  2458697069  阅读(280)  评论(0编辑  收藏  举报