java8新特性 lambda Stream function map(函数式编程).docx

java8新特性 lambda Stream function map(函数式编程).docx

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
java8新特性 lambda Stream function map(函数式编程)

Java8新特新Lambda Stream function map(函数式编程)1.接口的默认方法Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法//Formula表示一个设计 计算公式 的接口 public interface Formula {//计算double calculate(int a);//开方default double sqrt(int a){return Math.sqrt(a);}}main:Formula f = new Formula() {@Overridepublic double calculate(int a) {return a+1;}};System.out.println(f.calculate(4));System.out.println(f.sqrt(8));注意:现在接口还可以存在静态方法,可以使用 接口名.静态方法名 的形式直接调用2.Lambda 表达式2.1 认识Lambda表达式例如:public class LambdaTest1 {public static void main(String[] args) {//假如一个list机会中的元素要排序ListString list = Arrays.asList(hello,tom,apple,bbc);//之前的排序我们可以这样写Collections.sort(list, new ComparatorString(){@Overridepublic int compare(String o1, String o2) {return -pareTo(o2);}});//使用Lambda表达式Collections.sort(list,(String s1,String s2)-{return pareTo(s2);});//可以简写为//1.大括号里面就一句代码//2.编译器可以自动推导出参数类型Collections.sort(list,(s1,s2)-pareTo(s2));System.out.println(list);}}2.2 Functional接口“函数式接口”是指仅仅只包含一个抽象方法的接口,每一个该类型的lambda表达式都会被匹配到这个抽象方法。因为 默认方法 不算抽象方法,所以你也可以给你的函数式接口添加默认方法。我们可以将lambda表达式当作任意只包含一个抽象方法的接口类型,确保你的接口一定达到这个要求,你只需要给你的接口添加 @FunctionalInterface 注解,编译器如果发现你标注了这个注解的接口有多于一个抽象方法的时候会报错的。例如:public class LambdaTest2 {public static void main(String[] args) {LambdaTest2 t = new LambdaTest2();//也可以先创建对象//Action1 a1 = ()-System.out.println(hello);t.test1(()-System.out.println(hello));//Action2String,Integer a2 = (f)-这个数字是:+f;//如果参数就一个,那么还可以这样简写 去掉小括号Action2String,Integer a2 = f-这个数字是:+f;t.test2(a2);}public void test1(Action1 a){a.run();}public void test2(Action2String,Integer a){System.out.println(a.run(3));}}//这个注解不加也可以,加上只是为了让编译器检查@FunctionalInterfaceinterface Action1{public void run();}//这个注解不加也可以,加上只是为了让编译器检查@FunctionalInterfaceinterface Action2T,F{public T run(F f);}注意:lambda表达式无法访问接口的默认方法2.3 方法与构造函数引用Java 8 允许你使用 :: 关键字来传递方法(静态方法和非静态方法)例如:public class LambdaTest3 {public static void main(String[] args) {LambdaTest3 t = new LambdaTest3();//使用Lambda引用类的静态方法//能引用Integer类中的静态方法toBinaryString的原因是://Action3接口中只有一个方法且方法的参数类型和返回值类型//与In

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档