文章目录
枚举和Lambda表达式
1. 枚举
1.1 定义:
使用enum 定义,enum和类是同级别的。用来表示一组相同业务的值
1.2switch判断
public enum ColorEnom {
//枚举命名格式:所有枚举值使用全部字母大写的形式定义
RED,GREEN,BLACK;
}
public class App {
public static void main(String[] args) {
printColor(ColorEnom.GREEN);
}
public static void printColor(ColorEnom colorEnom){
switch (colorEnom){
case RED:
System.out.println("这是红色");
break;
case GREEN:
System.out.println("这是绿色");
break;
case BLACK:
System.out.println("这是黑色");
break;
default:
System.out.println("这是一个未知颜色");
break;
}
}
}
优点:
1. 可读性高
2. 减少了参数传递的错误率
3. 如果使用枚举,那么switch(多条件判断) 的写法更加简单,语义也更清晰。
4. 代码更加优雅
5. 枚举有内置方法,功能更加强大
缺点:不可继承,无法扩展
1.3 枚举常用方法
1.3.1 values() 使用
:以数组形式返回枚举类型的所有成员
public class App {
public static void main(String[] args) {
eachEnum();
}
private static void eachEnum(){
ColorEnom[] arrs = ColorEnom.values();
for(ColorEnom item : arrs){
System.out.println(item);
}
}
}
1.3.2 ordinal() 使用
:获取枚举成员的索引位置
public class App {
public static void main(String[] args) {
// printColor(ColorEnom.GREEN);
eachEnum();
}
private static void eachEnum(){
ColorEnom[] arrs = ColorEnom.values();
for(ColorEnom item : arrs){
int enumIdx = item.ordinal();
System.out.println(item + ":" +enumIdx);
}
}
}
1.3.3 valueOf() 使用
:将普通字符串转换为枚举实例
1.3.4compare() 使用
:比较两个枚举成员在定义时的顺序
谁 compareTo(shui)
下标 – 下标
2. Lambda 表达式
2.1 Lambda 定义
Lambda 表达式是JDK8中一个重要的新特性,lambda 表达式允许你通过表达式来代替功能接口(通过表达式实现业务功能)。
Lambda 表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体.
Lambda 表达式可以看作是一个匿名函数
2.2 为什么要用Lambda表达式
- 提供了更简单的语法和写代码的方式
- 取代匿名内部类
- 简化代码,干净整洁
2.3 Lambda 语法
基本语法:
(参数列表)-> (业务代码实现)
-> :被用于 (不可省略)
import java.util.Arrays;
import java.util.List;
public class LambdaTest {
public static void main(String[] args) {
List<String> List = Arrays.asList("MySQl", "liu");
//传统
for (String item : List) {
System.out.println(item);
}
System.out.println();
//lambda
List.forEach((item)->{
System.out.println(item);
}) ;
//简洁lambda
List.forEach(item-> System.out.println(item));
}
}
2.4 Lambda表达式和函数式接口
2.4.1 函数式接口定义:一个接口有且只有一个抽象方法
2.4.2 注意事项:
- 如果一个接口只有一个抽象方法,那么该接口就是一个函数式接口。
- 如果我们在某个接口上声明了 @FunctionalInterface 注解,那么编译器就会按照函数式接口的定义来要求该接口,这样如果有两个抽象方法,程序编译会报错。
2.4.3 函数式接口定义代码
@FunctionalInterface
interface MyFuncationalInterface {
void myMethod(Object agrs);
}
2.4.4 Lambda在集合中的使用
Map中的forEach
List排序
List查找
优点:
- 代码简洁,开发迅速
- 方便函数式编程
- 非常容易进行并行计算
- Java引入了Lambda,改善了集合操作
缺点: - 代码可读性变差
- 在非并行计算中,很多计算未必有传统的for性能要高
- 不容易进行调试