一、枚举
在定义枚举时,就声明了枚举中的元素了,在使用枚举时,不能对枚举的元素进行添加、修改和删除的操作。
public enum Week {
Monday,Tuesday,Wednesday,Thursday,Firday,Saturday,Sunday;
}
public static void main(String[] args) {
System.out.println(Week.Monday);
Week[] weeks = Week.values();
for(Week week:weeks) {//遍历
System.out.println(week);
}
}
public enum Week {
Monday("星期一"),Tuesday("星期二"),Wednesday("星期三"),
Thursday("星期四"),Firday("星期五"),Saturday("星期六"),Sunday("星期日");
String name;
//枚举的构造器默认都是private的
private Week(String name){
this.name = name;
}
public String getName() {
return name;
}
}
public static void main(String[] args) {
System.out.println(Week.Monday);
Week[] weeks = Week.values();
for(Week week:weeks) {
System.out.println(week);
}
System.out.println(Week.Monday.getName());
}
二、接口的默认方法和静态方法
Lambda表达式
语法:
( )- > { }
参数描述 - > 方法实现
当参数需要一个接口对象时,而接口只有一个抽象方法,这个接口对象就可以用Lambda表达式描述
参数类型可以推断
•如果参数的类型可以根据上下文推断出来,则可以省略掉类型。
存在多行代码
•如果sort() 里面的代码一行写不下的话,可以多行,但需要{ } 括起来。而且代码应该有明确的返回值。返回值的类型也由编译器推理得出。如果Lambda表达式中的语句块只有一行,则可以不用使用return语句
public class Test {
public static void main(String[] args) {
//参数描述->方法时间
new Thread(()->{System.out.println(".......");}) .start();
List<String> list = new ArrayList<String>();
Collections.addAll(list, "aaa","cccccccc","bb");
Collections.sort(list,(s1,s2)->s1.length()-s2.length());
Collections.sort(list,(s1,s2)->{return s1.length()-s2.length();});
System.out.println(list);
}
}
示例:
public interface Handler {
public String handle(String s);
}
public class Person {
String name;
public String getName(Handler handler) {
return handler.handle(name);
}
public static void main(String[] args) {
Person p = new Person();
p.name = "tom";
//一种语法糖
//Handler h = (s)->s.toUpperCase();
//将名字转大写
System.out.println(p.getName((s)->s.toUpperCase()));
//将名字的开头字母转大写
System.out.println(p.getName((s)->{
char c = s.charAt(0);
c = (char)(c-32);
return c+s.substring(1);//必须有明确的返回值
}));
}
}
三、函数式接口
指的是接口只有一个抽象方法的接口 ,为了克服 函数式接口的脆弱 ,可以使用@FunctionalInterface 标注函数式 接口。函数式接口对象可以隐式转换为Lambda表达式 。
四、方法引用
语法:
对象::方法名
public static void main(String[] args) {
List<String> list = Arrays.asList(new String[] {"a","b","c"});
//遍历list中的元素
for(String s:list) {
System.out.println(s);
}
//Collection接口提供forEach默认方法
list.forEach(new Consumer<String>() {
@Override
public void accept(String t) {
System.out.println(t);
}
});
list.forEach((s)->{System.out.println(s);});
//方法引用
//对象::方法名
//一个函数式接口 表示 一个方法引用 ,函数式接口的方法结构(参数和返回类型) 和 对象::方法名的方法的结构相同
Consumer<String> consumer = System.out::println;
list.forEach(consumer);
list.forEach(System.out::println);
consumer = Demo::method;
Handler handler = "abc"::concat;
Person p = new Person();
p.name = "tom";
System.out.println(p.getName(handler));
}
本文介绍了Java中的枚举类型,包括如何定义枚举、枚举常量的使用及其实例化。同时,详细讲解了接口的默认方法和静态方法,展示了Lambda表达式的应用。此外,还探讨了函数式接口的概念,以及方法引用的语法和实际运用。

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



