java8函数式编程学习

目录:

1. 函数式编程介绍

2. Lambda表达式

3. 函数式接口

 

一. 函数式编程介绍

面向对象编程的思想是对数据进行抽象,而面向函数编程的思想是对行为方法进行抽象。函数式编程的好处主要有:

1.函数式编程可以减少业务逻辑和代码的分歧。他允许我们再更高层次更自然的描述业务逻辑。

2.许多样板可以被移除,这会让代码更清晰和简洁。

3.高阶函数允许我们:发送方法到其他方法中;在其他方法中创建方法;从其他方法中返回方法。

4.ldambda表达式,实现惰性求职,当发送lambda表达式作为一个方法的参数,java编译器会在lambda表达式在方法中被调用时才计算他的值。 

 

二. Lambda表达式

Lambda表达式的实现是为了支持函数式编程,而为了支持lambda表达式,才有了函数式接口。 另外,在面对大型数据集合时,为了能够更加高效的开发,编写的代码更加易于维护,更加容易运行在多核CPU上,java在语言层面增加了Lambda表达式。

Lambda表达式使用: 例如运行一个线程一般这样写:

new Thread(new Runnable()) {
    @Override
    public void run() {
        System.out.println("Testing!");
    }
}).start();

使用lambda代码非常简洁:

new Thread(
    () -> System.out.println("Testing!");
);

三. 函数式接口

java8中接口变化:

1.静态方法:为了编写类库,对某些行为进行抽象。
2.默认方法:为了实现二进制的向后兼容性,引入了带有方法体、被default修饰的方法--默认方法。其主要思想就是如果子类中没有实现,那么采用父类提供的默认实现。

函数式接口,与其他接口的区别:

1. 函数式接口中只有一个抽象方法。

2. 可以有从Object继承过来的抽象方法,因为所有类的最终父类都是Object。

3. 接口中唯一抽象方法的命名不重要,因为函数式接口就是对某一行为进行抽象,主要目的是支持lambda表达式。

Java8之前已经存在的函数式接口有:

java.lang.Runnable
java.util.concurrent.Callable
java.security.PrivilegedAction
java.util.Comparator
java.io.FileFilter
java.nio.file.PathMatcher
java.lang.reflect.InvocationHandler
java.beans.PropertyChangeListener
java.awt.event.ActionListener
javax.swing.event.ChangeListener

另外,Java8还提供了@FunctionalInterface注解来帮助我们标识函数式接口。另外需要注意的是函数式接口的目的是对某一个行为进行封装,某些接口可能只是巧合符合函数式接口的定义。

如图1-3所示,为java8的Function包的结构(即新引入的函数式接口),图中绿色表示主要引入的新接口,其他接口基本上都是为了支持基本类型而添加的接口,方法的具体作用图中有具体说明。

实例: 自定义函数接口支持lambda表达式

public class LambdaMain {

	public static void main(String[] args) {
		
		Action action = System.out :: println;
		action.execute("Hello World!");
		
		test(System.out :: println, "Hello world!");
		test(action, "Hello world!");
			
	}
	
	static void test(Action action, String str) {
		action.execute(str);
	}
}

@FunctionalInterface
interface Action<T> {
    public void execute(T t);
}

原文地址:https://www.cnblogs.com/Dorae/p/7769868.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值