JAVA8新特性_知识点体系结构


以下Employee为一个自定义的类 1

Lambda

类型推断

Lambda 表达式中无需指定类型,参数类型可由编译器通过上下文推断得出

函数式接口

只包含一个抽象方法的接口,称为函数式接口

  • 四大内置接口
  1. 消费型Consumer < T >
//有参数,无返回值
void accept(T t);
  1. 供给型Supplier < T >
//无参数,有返回值
T get();
  1. 函数型Function < T, R >
//有参数,有返回值
R apply(T t);
  1. 断言型Predicate < T >
//有参数,返回值为boolean类型
boolean test(T t);
  • 其他接口:参数和返回值数量与以上四种不同,原理大同小异。

方法、构造器、数组引用

方法引用

  • 对象::实例方法
//一个典型Consumer的实现
Consumer<String> con = System.out::println;
con.accept("dsad");
Employee emp = new Employee();
Supplier<Integer> sup = emp::getAge;
System.out.println(sup.get());
  • 类::静态方法
Comparator<Integer> com = Integer::compare;
System.out.println(com.compare(5,3));
  • 类::实例方法
BiPredicate<String,String> bp = String::equals;
System.out.println(bp.test("hi","hi"));

构造器引用

Supplier<Employee> sup= Employee::new;
System.out.println(sup.get());

数组引用

Function<Integer,String[]> fun = String[]::new;
System.out.println(fun.apply(10).length);

Stream

  • Stream自己不会存储元素
  • Stream不会改变源对象。相反,会返回一个持有结果的新Stream
  • Stream操作时延迟执行的。会等到需要结果的时候才执行。

tip:一个 Stream 只可以使用一次!否则会报错IllegalStateException: stream has already been operated upon or closed

Stream<Employee> sm = employees.stream();
sm.limit(5).distinct().forEach(System.out::println);
sm.map(Employee::getName).forEach(System.out::println);//第二次使用会报错

Stream的三个操作步骤

  1. 创建Stream
  2. 中间操作
  3. 终止操作

创建Stream

        //1.通过Collection系列集合提供的的stream()或parallelStream()
        List<String> list = new ArrayList<>();
        Stream<String> sm1 = list.stream();

        //2.通过Arrays类中的静态方法stream()
        Employee[] employees = new Employee[10];
        Stream<Employee> sm2 = Arrays.stream(employees);

        //3.通过Stream类中的静态方法of()
        Stream<String> sm3 = Stream.of("aa","bb","cc");

        //4.无限流
        //迭代
        Stream<Integer> sm41 = Stream.iterate(0,(x)-> x+2);
        
        //生成
        Stream<Double> sm42 = Stream.generate(() -> Math.random());

中间操作

  • 筛选与切片
    filter(Predicate p)
    distinct()
    limit(long maxSize)
    skip(long n)
  • 映射
    map(Function f)【类比List的add()】
    flatMap(Function f)【类比List的addAll()】
  • 排序
    sorted()【自然排序】
    sorted(Comparator comp)【定制排序】

终止操作

  • 查找与匹配
    forEach(Consumer c)
    allMatch(Predicate p)【返回boolean】
    anyMatch(Predicate p)【返回boolean】
    noneMatch(Predicate p)【返回boolean】
    findFirst()【返回Optional< T >】
    findAny()【返回Optional< T >】
    max(Comparator c)【返回Optional< T >】
    min(Comparator c)【返回Optional< T >】
  • 归约与收集
    reduce(T iden, BinaryOperator b) 【返回T】
    reduce(BinaryOperator b)【返回Optional< T >】
    collect(Collector c)

  1. Employee为一个自定义的简单的类,用于实例演示。其包含三个属性:name,age,salary,以及相应的set/get方法, ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值