zoukankan      html  css  js  c++  java
  • java8 语言特性

    Lamda 表达式

    • 使用内部类也可以实现相关的功能, 但使用lamda更简短
    • lamda 的参数类型可以省略
    • 如果是单条语句, lamda 的花括号可以省略
    • 如果是单条语句, lamda 的 return 可以省略
    • 如果是单个参数, 圆括号也可以省略
    @FunctionalInterface
    interface MathOperation{
        int operation(int a,int b);
    }
    
    MathOperation addition = (int a , int b)-> a+b;
    MathOperation subtraction = (a,b)->a-b;
    

    方法引用

    方法引用是指可以使用 :: 符号来通过名称引用方法.

    可以使用在下面的方法上:

    • 静态方法
    • 实例方法
    • 构造方法, 如 Array::new
    List<String> names = new ArrayList<>();
    names.add("Mahesh");
    names.add("Suresh");
    names.add("Ramesh");
    names.add("Naresh");
    names.add("Kalpesh");
    
    names.forEach(System.out::println);
    

    默认方法

    是为了保持向后兼容性, 能够让旧的接口可以使用 java8 提供的 lamda 功能.

    如果一个类继承了两个具有相同默认方法的接口, 则可以通过下面方式消除二义性

    1. 子类重写
    2. 使用类名.super.方法名(), 类似委托
    public class car implements vehicle, fourWheeler {
    
       default void print() {
          vehicle.super.print();
       }
    }
    

    接口允许有静态默认方法

    Streams API

    生成 Streams

    • stream()
    • parallelStream()

    forEach

    • forEach
    Random random = new Random();
    random.ints().limit(10).forEach(System.out::println);
    

    map

    List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
    List<Integer> squaresList = numbers.stream().map(i->i*i).distinct().collect(Collectors.toList());
    

    filter

    limit

    sorted

    Collectors

    String mergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", "));

    Statistics

    IntSummaryStatistics stats = numbers.stream().mapToInt(x->x).summaryStatistics();
    System.out.println(stats.getMax());
    System.out.println(stats.getSum());
    System.out.println(stats.getAverage()
    

    Optional

    public static void main(String[] args) {
        Integer value1 = null;
        Integer value2 = new Integer(10);
    
        Optional<Integer> a= Optional.ofNullable(value1);
        Optional<Integer> b = Optional.of(value2);
    
        System.out.println(sum(a,b));
    }
    
    public static Integer sum(Optional<Integer> a,Optional<Integer> b){
        System.out.println(a.isPresent());
        System.out.println(b.isPresent());
        Integer value1 = a.orElse(new Integer(0));
        Integer value2 = b.get();
        return value1+value2;
    }
    

    Nashorn Javascript

    • jjs 工具

    日期/时间 API

    旧 API 的缺陷

    • 线程不安全: Date 不是线程安全的, 而新的 API 是非可变的因此是线程安全的

    • 设计问题: 默认日期从1900开始, 月份从1开始,日期从0开始, 因此不统一, 也没有直接操作的API. 新API提供了工具方法.

    • 难以处理时区: 需要编写大量代码处理时区问题.

      新的API在 java.time 包下提供了两个类: Local 以及 Zoned.

    LocalDate, LocalTime , LocalDateTime

    ZoneDateTime , ZoneId

    Period, Duration

    Period 处理基于日期的
    Duration 处理基于时间的

    Temporal 适配

    TemporalAdjusters 类有大量辅助方法

    向后兼容

    DateCalendar 新增的 toInstant() 方法可以将其转化为新的对象.

    Instant instance = data.toInstant();
    ZoneId current = ZoneId.systemDefault();
     LocalDateTime localDateTime = LocalDateTime.ofInstant(instance, currentZone);
    

    Base64

    面试题

    使用Lamda为 String 的list排序?

    Collections.sort(names,(s1,s2)->s1.compareTo(s2));
    
  • 相关阅读:
    Yum与list结合
    DNS辅助
    DHCP中继
    apache+SSL 搭建https
    vsftpd服务器
    根据Eclipse SVN changelog使用ANT自动打增量包
    SHELL 近期学习
    Tomcat源码学习一
    oracle笔记
    Linux 下安装 SVN服务器
  • 原文地址:https://www.cnblogs.com/walkinhalo/p/11125727.html
Copyright © 2011-2022 走看看