课程名称:Java函数式编程
课程章节:第1章-函数式编程介绍
课程讲师:接灰的电子产品
课程内容:
- 函数式编程的介绍
- 函数式编程的特点
1. 函数式编程的介绍
1.1 介绍
-
函数式编程是一种编程范式,它将计算视为函数的运算,并避免变化状态和可变数据。它是一种声明式编程范式,也就是说,编程是用表达式或声明而不是语句来完成的。
-
Lamda 表达式:(a, b) -> a + b;
-
-
比起指令式编程,函数式编程更加强调程序执行的结果而非执行的过程,倡导利用若干简单的执行单元让计算结果不断渐进,逐层推导复杂的运算,而不是设计一个复杂的执行过程。
userList.stream() .skip(1) .peek(user -> log.debug("user:{}", user.getUserName())) .collect(Collectors.toList());
1.2 优点
- 使我们更简单语句编写复杂的代码。
// Java7
button.addActionListener(new ActionListener(){
@Overide
public void actionPerformed (ActionEvent e){
doSomethingwith(e) ;
}
});
//Java8
button.addActionListener(
e -> doSomethingWith(e));
//Java7
Collections.sort(list, new Comparator<Integer>(){
@Overide
public int compare(final Integer o1,final Integer o2){
return o2.compareTo(o1);
}
});
//Java8
Collections.sort(
list, (o1, o2) -> o2.compareTo(o1));
1.3 特点
- 纯函数
- 函数的执行没有副作用。
- 返回值依赖于输入参数。
- 高阶函数
- 函数的参数可以是一个/多个函数。
- 函数的返回值也可以是一个函数。
interface IFactory<T> {
T create();
}
interface IProducer<T> {
T produce();
}
interface IConfigurator<T> {
void conifgure<T t>
}
static class HigherOrderFunctionClass{
public <T> IFactory<T> createFactory(IProducer<T> producer, IConfigurator<T> configurator){
return () -> {
T instance = producer.produce();
configurator.configure(instance);
return instance;
}
}
}
//调用
Ifactory<User> factory = new HigherOrderFunctionClass()
.createFactory(
//第一个参数
() -> User.builder().id(100L).name("imooc").build(),
//第二个参数
(user) -> {
log.debug("用户信息:{}", user);
user.setMobile("13970212222");
}
}
);