您的位置:首页 > 编程语言 > Java开发

关于Java 8 的一些理解

2016-09-15 17:31 246 查看
这几天看了一些别人写的源码,突然出现“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(){

//具体的实现内容

}

}

以上这些还是只是大致的理解,具体的使用过程还是要多百度一下,多学多用才能理解透彻。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java lambda