一、枚举
枚举和类同级别,包含有限个确定的对象,通常把能够一一列举的的类型用枚举来表示,如一周的七天、一个月的30天等。
1、枚举的创建
所有枚举值都要大写
public enum Color {
RED,BLUE,BLACE,YELLOW
};
2、枚举中的常用方法
(1)values()方法
以数组形式返回枚举类型中的所有成员
Color[] color=Color.values();
for (Color i:color) {
System.out.println(i);
}
(2)orindal()方法、
返回枚举类型的成员下标
//遍历枚举类,并以数组形式输出
Color[] color=Color.values();
for (Color i:color) {
int index=i.ordinal();
System.out.print(index+" ");
System.out.println(i);
}
//获取枚举成员索引
int blackIndex=Color.BLUE.ordinal();
System.out.println(blackIndex);
(3)valueof()方法
将普通字符转换为枚举实例
注意:此方法时查找出字面值与该字符相等的枚举值,有可能此字符没有相等的,就不能转换,就可以抛出异常
//将普通字符转换成枚举实例
String red="RED";
try {
Color color1=Color.valueOf(red);
System.out.println(color1);
}catch (Exception e){
System.out.println("转换出错!");
}
(4)compareTo()
比较两个枚举在定义时的顺序
注意:返回的是一个整数类型的数值,表示:比较的枚举值-待比较的枚举值
//比较两个枚举定义时的顺序
int i=Color.BLACE.compareTo(Color.RED);
System.out.println(i);
3、枚举的优缺点
优点:
(1)增强了代码的可读性;
(2)减少传递参数的错误概率,因为传的参数只能是枚举类型;
(3)switch判断更方便,语法更清晰;
public static void main(String[] args) {
printColor(Color.RED);
}
public static void printColor(Color color){
switch (color){
case RED:
System.out.println("红色");
break;
case BLACE:
System.out.println("黑色");
break;
case BLUE:
System.out.println("蓝色");
break;
case YELLOW:
System.out.println("黄色");
break;
}
}
(4)代码足够简洁,优雅。
缺点:
枚举类不可以被继承,可扩展性差。
二、Lambda表达式
1、什么是lambda表达式
lambda是JDK8中提出的新特性,允许通过表达式来代替接口功能。lambda表达式和方法一样,提供了一个正常的参数列表和一个使用参数的方法,可以看做一个匿名函数。
2、创建语法
(参数列表)->{方法题}
注意:
(1)无参数,小括号可以省略;
(2)方法题只有一句代码,大括号可以省略;
(3)方法体中只有一条return语句,return可以省略。
3、lambda表达式的使用
lambda表达式在使用前必须初始化,要借助函数式接口(@FunctionalInterface)来初始化。
4、函数式接口
(1)函数式接口:其中只有一个抽象方法,如果在某个接口声明了@FunctionalInterface,编译器会自动按照函数式接口的定义来要求该接口,有两个抽象方法就会报错。
(2)lambda表达式实例化
@FunctionalInterface
interface MyFunctionalInterface {
void myMethoh(Object...args);
}
public class Lambda_Test {
public static void main(String[] args) {
//借助函数式接口实例化
MyFunctionalInterface functionalInterface=(item)->{
for (Object o:item) {
System.out.println(o.toString());
}
};
functionalInterface.myMethoh("hello","java");
}
}
5、lambda在集合中的使用
(1)list排序:
public static void main(String[] args) {
List<Integer> lists=new ArrayList(){{
add(1);
add(3);
add(2);
add(5);
}};
System.out.println("排序前:"+lists);
//使用前
lists.sort(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1-o2;
}
});
System.out.println("未使用lambda排序后:"+lists);
lists.sort((o1,o2)->{return o1-o2;});
}
6、lambda优缺点:
优点:
(1)代码简洁,开发迅速;
(2)方便函数式编程;
(3)非常容易进行并行计算;
(4)改善了Java的集合操作;
缺点:
(1)代码可读性降低;
(2)不容易进行调试。