关于Java 8 的一些理解

这几天看了一些别人写的源码,突然出现“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(){
//具体的实现内容
}
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值