- Java8 新特性
- 接口中默认的方法修饰为普通方法
- Lambda表达式
- 为什么要使用Lambda表达式
- Lambda表达式的规范
- 函数接口定义
- Lambda基础语法
- 无参方法调用
- 带参数方法调用
- 精简语法
- Lambda实战案例
- 案例一:
- 案例二:
在JDK8之前.interface之中可以定义变量和方法,变量必须是public,static, final的, 方法必须是public,abstract的, 由于这些修饰符都是默认的
- 接口定义方法: public抽象方法,需要子类实现
- 接口定义变量, public static final
在JDK1.8 开始, 支持使用static的default修饰 可以写方法体, 不需要子类重写
方法:
- 普通方法: 可以有方法体
- 抽象方法: 没有方法体需要子类实现,重写.
public interface JDKInterface { void add(); void addOrder(); default void getDefaultOrder() { System.out.println("我是默认的方法体"); } } public class JDKInterfaceImpl implements JDKInterface { @Override public void add() { } @Override public void addOrder() { } }Lambda表达式
什么是lambda表达式
为什么要使用Lambda表达式lambda好处: 简化我们匿名内部类的调用
lambda+方法引入 代码变得更加精简
可以非常简洁的形式调用我们的匿名函数接口。
public interface OrderService { void get(); }
public class Test02 { public static void main(String[] args) { // 1.使用new的实现类的形式调用接口 OrderService orderService = new OrderService() { @Override public void get() { System.out.println("hhhhh"); } }; orderService.get(); // 2.使用匿名内部接口调用 new OrderService() { @Override public void get() { System.out.println("hhhhh"); } }.get(); // 3.使用lambda调用接口 ((OrderService) () -> System.out.println("hhhhh")).get(); } }Lambda表达式的规范
使用Lambda表达式 依赖于函数接口
- 在接口中只能允许使用一个抽象方法
- 在函数接口中定义object类中方法
- 使用默认或者静态方法
- @FunctionalInterface 表示该接口为函数接口
函数接口定义Java中使用Lambda表达式的规范,必须是为函数接口
函数接口的定义:在该接口中只能存在一个抽象方法,该接口称作为函数接
- 在接口中只能有一个抽象方法
- FunctionalInterface标记为接口为函数接口
- 可以通过default修饰普通方法
- 可以定义object类中的方法
@FunctionalInterface public interface MyFunctionalInterface { void add(); default void get() { } String toString(); }Lambda基础语法
( ) — 参数列表
–> 分割
{} 方法体
(a,b)->{
}
- 无参方法调用
- 带参数方法调用
():函数方法参数列表 ->分隔 {}方法体 (a,b)->{ Sout(a,b) } Lambda语法: ():参数列表 ->分隔 {}:方法体 ()->{}无参方法调用
@FunctionalInterface public interface AcanthopanaxInterface { void get(); }
public class Test03 { public static void main(String[] args) { //1.使用匿名内部类调用 new AcanthopanaxInterface() { @Override public void get() { System.out.println("get"); } }.get(); //2.使用lamdba表达式调用方法 AcanthopanaxInterface acanthopanaxInterface = () -> { System.out.println("使用lamdba表达式调用方法"); }; acanthopanaxInterface.get(); } }带参数方法调用
@FunctionalInterface public interface YouShenInterface { String get(int i, int j); }
public class Test04 { public static void main(String[] args) { //1.使用匿名内部类调用 YouShenInterface youShenInterface = new YouShenInterface() { @Override public String get(int i, int j) { return i + "-----" + j; } }; System.out.println(youShenInterface.get(2, 4)); //2.使用lamdba表达式调用方法 YouShenInterface you = (i, j) -> { return i + "-----" + j; }; System.out.println(you.get(2,6)); //3.使用lamdba表达式调用方法 ((YouShenInterface)(i,j)->i+"---"+j).get(6,7); } }精简语法
public class Test05 { public static void main(String[] args) { AcanthopanaxInterface acanthopanaxInterface = () -> System.out.println("我是方法"); acanthopanaxInterface.get(); //精简代码 // 使用lambda方法体中中只有一条语句的情况下 ((AcanthopanaxInterface) () -> System.out.println("我是你别笔笔不")).get(); YouShenInterface youShenInterface = (i, j) -> { return i + "++++++" + j; }; // 使用Lambda 方法体中只有一条语句的情况下,在这时候我们不需要写{} 也可以不需要写return String s = ((YouShenInterface) (i, j) -> i + "++++++" + j).get(4, 5); System.out.println(s); } }Lambda实战案例 案例一:
public class Test06 { public static void main(String[] args) { ArrayList案例二:string = new ArrayList<>(); string.add("qqqq"); string.add("rrrrrr"); string.add("aaaaa"); //普通输出: string.forEach(new Consumer () { @Override public void accept(String s) { System.out.println("0---"+s); } }); //Lambda: string.forEach((o)->{ System.out.println(o); }); } }
public class Test07 { public static void main(String[] args) { ArrayListuserLists = new ArrayList<>(); userLists.add(new UserEntity("cqqqq", 23)); userLists.add(new UserEntity("ooooo", 14)); userLists.add(new UserEntity("-----", 44)); //方法一: 排序 //普通内部类: userLists.sort(new Comparator () { @Override public int compare(UserEntity o1, UserEntity o2) { return o1.getAge() - o2.getAge(); } }); //方法一: 排序 //Lambda: userLists.sort((o1, o2) -> o1.getAge() - o2.getAge()); userLists.forEach((t) -> { System.out.println(t.toString()); }); } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)