关于Java 8 的一些理解

    xiaoxiao2022-08-06  26

    这几天看了一些别人写的源码,突然出现“stream”,还有在方法实参里出现一个方法块,不能理解,就开始学习一些关于Java 8 的新特性。

    1、Lambda表达式 (Type1 param1, Type2 param2, ..., TypeN paramN) -> { statment1; statment2; //............. return statmentM; } 这是一个Lambda表达式的结构 一个参数列表,加上一个”->”,再加一个方法体,这个方法体可以有返回值也可以没有,取决于用途。

    上面的lambda表达式语法可以认为是最全的版本,写起来还是稍稍有些繁琐。别着急,下面陆续介绍一下lambda表达式的各种简化版:

    (1)参数类型省略–绝大多数情况,编译器都可以从上下文环境中推断出lambda表达式的参数类型。这样lambda表达式就变成了:

    (param1,param2, …, paramN) -> { statment1; statment2; //…………. return statmentM; }

    (2)当lambda表达式的参数个数只有一个,可以省略小括号。lambda表达式简写为:

    param1 -> { statment1; statment2; //…………. return statmentM; }

    (3)当lambda表达式只包含一条语句时,可以省略大括号、return和语句结尾的分号。lambda表达式简化为:

    param1 -> statment

    如果lambda表达式想要使用外部的变量,那个变量就要是final类型的,但是如果不是final类型的,新的Java机制会隐性的将那个变量当成final类型来处理

    2、方法引用 方法引用语法格式有以下三种: 实例化对象::成员方法 类名::静态方法 这两种相当于把lambda表达式的参数当成方法的参数使用

    类名::成员方法 这种方法是把lambda表达式的第一个参数当成一个目标对象,就这个对象来调用成员方法,方法里的参数就是lambda表达式其余的参数

    3、构造引用 构造器引用语法如下: 类名::new 将lambda表达式的参数当成构造方法的参数,来构造对象

    4、Stream 他的作用是遍历一个集合,然后对这个集合中的元素进行操作,这个过程相比于迭代器Iterator更快速,因为Stream支持顺序和并行的操作。

    举个例子: //计算集合中不为null的个数 List nums = Arrays.asList(1, null, 3, 4, null, 6); nums.stream().filter(num -> num != null).count();

    (1)stream()方法创建一个stream流 (2)filter()方法进行过滤,这个过滤并不是把不符合条件的对象移除掉,而是新建一个stream流,将符合条件的对象添加到新的流里 (3)count()方法计算个数

    总结一下使用Stream的基本步骤: (1)创建Stream; (2)转换Stream,每次转换原有Stream对象不改变,返回一个新的Stream对象(可以有多次转换); (3)对Stream进行聚合(Reduce)操作,获取想要的结果;

    5、默认方法(Default) 可以使接口有一个默认的实现方法,而非抽象的 例如: public interface A{ default void foo(){ //具体的实现内容 } }

    以上这些还是只是大致的理解,具体的使用过程还是要多百度一下,多学多用才能理解透彻。

    转载请注明原文地址: https://ju.6miu.com/read-1132110.html
    最新回复(0)