zoukankan      html  css  js  c++  java
  • JDK7和JDK8一些重要新特性

    jdk7新特性(部分)

    • switch支持字符串
    • List tempList = new ArrayList<>(),泛型实例化自动推断
    • AutoCloseable接口实现自动关闭,在try()中
    • 新增获取环境信息的工具方法,getJavaHomeDir,getUserHomeDir,getUserDir等
    • 对java集合的增强支持,如:
          List<String> list=["item"]; //向List集合中添加元素
          String item=list[0]; //从List集合中获取元素
    
          Set<String> set={"item"}; //向Set集合对象中添加元素
    
          Map<String,Integer> map={"key":1}; //向Map集合中添加对象
          int value=map["key"]; //从Map集合中获取对象
    
    • 数值可以加下划线,int one_million = 1_000_000;
    • 在try catch异常扑捉中,一个catch可以写多个异常类型,用"|"隔开;

    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
    • 支持多重注解

    参考这里

  • 相关阅读:
    easyui datagrid 本地json数据 实现删除
    Kindeditor单独调用多图上传
    Kindeditor单独调用单图上传增加预览
    HTML <frameset> 标签
    easyui datagrid 获取行数据某个字段
    easyui datagrid 表格中操作栏 按钮图标不显示
    web安全之XSS跨站脚步攻击
    兼容低版本JS的Array.map方法
    关于wince串口接收数据异常
    VC中控制台程序和基于对话框的程序之间的区别
  • 原文地址:https://www.cnblogs.com/lknny/p/6085050.html
Copyright © 2011-2022 走看看