java8新特性初学笔记

本文介绍了Java8的一些重要新特性,包括接口的默认方法实现,Lambda表达式的使用,函数式接口的概念,以及方法和构造函数的引用。重点讲解了Lambda的范围,如访问局部变量、成员变量和静态变量的规则。此外,还探讨了内置的函数式接口,如Predicate、Function、Supplier、Consumer和Comparator,并介绍了Optional和Stream的概念及其操作,包括过滤、排序、映射、匹配、计数和归约。文章最后展示了并行流的使用,以提高代码执行效率。
摘要由CSDN通过智能技术生成
  1. 允许接口有默认方法实现
    java8之前接口不允许有方法的的实现,java8允许使用default关键字,为接口添加非抽象的方法实现。

    public interface Formula {
        double caculate(int a);
        default double sqrt(int a){
          return Math.sqrt(a);
        };
    }
    

    调用默认方法

    Formula formula = (int a)-> a*100;
    System.out.println(formula.caculate(10));;
    System.out.println(formula.sqrt(100));;
    
  2. Lambda表达式
    之前对list排序,sort方法接受一个Comparator接口作为输入参数,Comparator的实现类可以对输入的;ist中的元素进行比较:

    List<String> list = Arrays.asList("zhangsan","lisi","wangwu");
        list.sort(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.compareTo(o2);
            }
        });
        list.forEach(System.out::println);
    

    可以用lambda简化为:

    List<String> list = Arrays.asList("zhangsan","lisi","wangwu");
        list.sort((String o1, String o2)-> {
                return o1.compareTo(o2);
            }
        );
        list.forEach(System.out::println);
    

    还可以继续简化:

    List<String> list = Arrays.asList("zhangsan","lisi","wangwu");
        list.sort((o1, o2)-> o1.compareTo(o2));
        list.forEach(System.out::println);
    
  3. 函数式接口
    每一个lambda都能够通过一个特定的接口与一个给定的类型进行匹配。一个所谓的函数式接口必须有且仅有一个抽象方法声明。每个与之对应的lambda表达式必须要与抽象方法的声明相匹配。由于默认方法不是抽象的,因此你可以在你的函数式接口里任意添加默认方法。
    任意只包含一个抽象方法的接口,我们都可以用来做成lambda表达式。为了让定义的接口满足要求,因该在接口前加上@FunctionalInterface标注。编译器会注意到这个标注,如果接口中定义了第二个抽象方法的话,编译器会抛出异常。
    例子:

    @FunctionalInterface
    public interface Converter<F,T> {
        T convert(F from);
    }
    
    Converter<String,Integer> converter = from -> Integer.valueOf(from);
    System.out.println(converter.convert("123"));
    
  4. 方法和构造函数的引用
    上面的代码可以通过静态方法引用

    Converter<String,Integer> converter = Integer::valueOf;
            System.out.println(converter.convert("123"));
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值