Java8新特性详解1——概述

为什么要关心Java8?

2014年3月Java8发布。为什么我们应该关心java8呢?理由是:java8所做的改变,比起java历史中的任何一次改变都要深远。java8把函数式编程中一些好的想法融入到大家熟悉的java语法当中(可以把函数式编程看作是java8中额外的设计模式和语汇)。这些改变,使代码变得简洁,并更接近问题的描述。

java8的好处在于它提供了更多编程工具和概念,能以更为简洁,更易于维护的方式解决新的或现有的编程问题,这也正是java8受欢迎之处。

概述

本文将从以下几方面,简单的概述java8的新特性:

  • 流处理
  • 行为参数化(向方法传递代码)
  • 接口中的默认方法

流处理

第一个编程概念是“流处理”。流是一系列的数据项,一次只生成一项。程序可以从输入流中一个一个读取数据项,然后以同样的方式写入到输出流中。一个程序的输出流可以是另一个程序的输入流。
基于这一思想,java8在java.unit.stream中添加了一个Stream API,Stream < T >就是一系列T类型的项目。Stream API的很多方法可以链接成一个复杂的流水线,尽管流水线是一个序列,但不同的方法运行一般是并行的。
Stream API和Collection的行为差不多,区别是Collection为了存储和访问数据;Stream主要用于描述对数据的计算。

行为参数化

行为参数化就是可以帮助你处理频繁变更的需求的一种软件开发模式。为了编写能够应对变化的需求的代码,java8中增加的另一个编程概念是通过API来传递代码的能力,即把方法(函数)作为参数传递到另一个方法的能力。java8新增了函数的概念,是值的一种新形式。以下几段代码是将行为参数化的例子:

匿名类
public interface ApplePredicate{
	public boolean test (Apple a);
}

List<Apple> redApple = filterApple(inventory, new ApplePredicate() {
	public boolean test(Apple a) {
		return "red".equals(a.getColor());
	}
})
方法引用::
File[] hiddenFiles = new File(".").listFiles(File::isHidden);
lambda——匿名函数
public interface ApplePredicate{
	public boolean test (Apple a);
}

List<Apple> redApple = filterApple(inventory,  (Apple a) ->  "red".equals(a.getColor()));

默认方法

java8中加入默认方法主要是为了支持库设计师,让他们能够写出更容易改进的接口。

List<Apple> redApple = inventory.stream().filter( (Apple a) ->  "red".equals(a.getColor())).collect(toList());

在上面的例子中,在java8出现之前,List< T >并没有stream()方法,它实现的Collection < T >接口也没有。最简单的解决方法就是把stream方法加入到Collection接口中,并在ArrayList类中实现该方法。但是这对于用户来说就很难搞了,这意味着所有Collection的实现类都必须为其提供实现。
那么如何能够改变已发布的接口而不破坏已有的实现呢?
java8的解决方法是:由接口提供没有方法主体的方法(称为默认实现),而不是又实现类提供。

总结

本文仅对java8基础知识有个基本的认识与了解,后续还会继续发文,针对java8新特性的每一个知识点有一个系统的总结。
不足之处请留言告知~

参考书籍:《Java8 实战》

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值