基本概念:
1、函数一等公民
- 好比Java其他数据类型,函数可以作为数据返回,也可以作为数据传参
2、Lambda表达式
- Java 8 引入的新特性,描述的是一个函数,基本语法: (parameters) ->{ statements; }
- 特定情况参数parameters,{} 可以省略。 左边是参数,右边是函数方法,->是连接符号
- 方法引用,即高级语法:String::equals 简单理解就是类::实例方法
- 多使用在匿名类,只有一个方法的接口,函数式接口,配合Stream流API使用
3、函数式接口
- 注解了@FunctionalInterface的接口,只有一个方法
- Java 8 内置了多种函数式接口常见的如:Function、Predicate、Supplier、Consumer,也支持自定义函数接口
- 配合Lambda语法定义接口,通过调用方法名执行表达式。
4、Stream流
- 初期看来很难理解,但是实际运用后确实这个词很精辟。
- 数据流化后可以进行一系列的行为操作比如:过滤、排序、改变值,最后进行终止操作比如:循环输出、汇总、收集到容器
- 流配合Java 8 提供的API加上Lambda表达式使得代码十分简洁
示例
package test;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
public class Test3 {
public static void main(String[] args){
//流+lambda示例
List<Integer> list = Arrays.asList(5, 2, 3, 3, 2);
//去重
List<Integer> resultprimes = list.stream().distinct().collect(Collectors.toList());
//降序,循环加1,输出
list.stream().sorted(Comparator.reverseOrder()).map((x)->x+1).forEach(System.out::println);
//汇总
Integer result = resultprimes.stream().reduce((a,b)->a+b).get();
System.out.println(result);
//匿名函数
//旧
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Before Java8, too much code for too little to do");
}
}).start();
//Lambda
new Thread( () -> System.out.println("In Java8, Lambda expression rocks !!") ).start();
//函数式接口
//Function<T, R> 接收一个参数并返回结果的函数 R apply(T t) 为其中的方法
Function<String,Boolean> function = (String x)->x.equals("true");
System.out.println(function.apply("1"));
//只有一个方法的接口
Myfunction myfunction = (x) -> x + "ccccc";
System.out.println(myfunction.method("aaaaaabbbbb"));
}
//只有一个方法的接口
interface Myfunction {
String method(String a);
}
}
Java 8 内置函数式接口参考:
https://blog.youkuaiyun.com/qq_29848473/article/details/79554472
本文深入探讨Java8的四大核心特性:函数一等公民、Lambda表达式、函数式接口及Stream流,通过代码示例展示如何利用这些特性提高代码效率与可读性。
212

被折叠的 条评论
为什么被折叠?



