第10章接口与Lambda表达式.ppt

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
6.1.1 Lambda表达式简介 Lambda表达式是可以传递给方法的一段代码,它可以是一个语句,也可以是一个代码块。 6.1.1 函数式接口 函数式接口(function interface)是指仅包含一个抽象方法的接口,因此也称为单抽象方法(SAM,Single Abstract Method)接口。 每一个Lambda表达式都对应一个函数式接口类型。可以将Lambda表达式看作实现函数式接口的类的一个实例。 在Java类库中有些接口就只含有一个抽象方法,如Runnable接口、Comparable接口和Comparator接口等。此外,java.util.function中包含几十个函数式接口。 6.1.1 函数式接口 在定义函数式接口时可以给接口添加@FunctionalInterface注解,如果接口定义多于一个的抽象方法,编译器会报错。 @FunctionalInterface interface ConverterF, T { ??? T convert(F from); } 6.1.1 Lambda表达式语法 使用Lambda表达式将代码传递给方法,有两种方式指定Lambda表达式,一般格式如下: (参数1, 参数2, ...) - 表达式 (参数1, 参数2, ...) - { /* 代码块 */ } 6.1.1 Lambda表达式语法 如果Lambda表达式没有参数,仍然需要提供一对空的小括号,就像不带参数的方法一样。 () -{ for(int i = 0; i 1000; i++) doWork(); // 执行某种操作 } 6.1.1 Lambda表达式语法 如果Lambda表达式的参数类型是可以推导的,那么还可以省略它们的类型。 如果Lambda表达式只含有一个参数,并且该参数的类型可以被推导出来,则参数的小括号也可以省略。 6.1.1 预定义的函数式接口 FunctionT, R接口定义了apply()方法,它带一个参数,并返回一个值,定义如下: public interface FunctionT, R{ R apply(T argument); } 在java.util.function包中定义了大量的函数式接口,它们使编写Lambda表达式变得容易。 6.1.1 预定义的函数式接口 PredicateT函数接口定义了test(T t)方法,它带一个参数T,基于参数T值返回布尔值true或false。 public interface PredicateT{ boolean test(T t); } 6.1.1 预定义的函数式接口 SupplierT接口定义一个不带参数get()方法,它返回一个值。 public interface SupplierT{ T get(); } 6.1.1 预定义的函数式接口 ConsumerT是一种无返回的操作,它有一个名为accept(T t)的抽象方法。 public interface ConsumerT{ void accept(T t); } 6.1.1 方法引用与构造方法引用 Java中有许多方法带一个函数式接口对象作为参数。如果传递的表达式有实现的方法,可以使用一种特殊的语法,方法引用(method referencing)代替Lambda表达式。 比如,想打印列表的全部元素。ArrayList类有个forEach()方法,它的参数是ConsumerT实例,它会在所有元素上执行一个accept()函数。可以给forEach()方法传递一个Lambda表达式,如下所示。 list.forEach(x-System.out.println(x)); 6.1.1 方法引用与构造方法引用 方法引用是类名或对象引用,后跟两个冒号(::),然后是方法名。可以引用静态方法、实例方法甚至构造方法。 方法引用有以下三种方式: 对象::实例方法名 类名::静态方法名 类名::实例方法名 System.out::println list.removeIf(Objects::isNull); String::compareToIgnoreCase 6.1.1 方法引用与构造方法引用 构造方法引用与方法引用类似,构造方法引用有下面两种格式: 类名::new 数组::new 6.1.1 方法引用与构造方法引用 假设有一个字符串列表: ListString names = Arrays.asL

文档评论(0)

有谱教育资源分享 + 关注
实名认证
内容提供者

热爱生活,分享教育专业文档! 所有资料均来源于互联网公开下载资源,如有侵权,请联系管理员及时删除。

1亿VIP精品文档

相关文档