Java_Stream流&&lambda表达式&&引用&&函数式接口
Stream流&&lambda表达式&&引用&&函数式接口
引用并不是函数式接口的高级用法,引用和Lambda是孪生兄弟>
1.前言
本文适合了解过Stream流和Lambda表示式和引用的读者
2.体验
1 | //根据id列表获数据库中的用户列表 |
3.说明
- toMap
我们先来看Stream流中toMap这个方法,他要求的是一个Function keyMapper接口
方法名 | 说明 |
---|---|
public static Collector toMap(Function keyMapper,Function valueMapper) | 把元素收集到Map集合中 |
Function接口
Function<T,R>接口通常用于对参数进行处理,转换(处理逻辑由Lambda表达式实现),然后返回一个新的值
T是传递参数,R是返回值
方法名 | 说明 |
---|---|
R apply(T t) | 将此函数应用于给定的参数 |
- 举例复习
1 | public class FunctionDemo { |
- 引用
而对于User::getId
显然用到的是,引用中的引用类的实例方法,其实就是引用类中的成员方法,对于这个方法的参数,我们有以下总结** Lambda表达式被类的实例方法替代的时候,第一个参数作为调用者,后面的参数全部传递给该方法作为参数**
1 | List<User> userList = accountService.getUserList( userIds); |
1 | public Long getId() |
根据stream流默认参数传递的是userList
中的元素User
实例,可以判断出这个调用者的参数是User user = new User();
中的user(这只是一个形参,也可以是其它名字,),因此User::getId
不做引用应该表达成user -> user.gerId
,对应的mapper接口应该是这样
1 | public class FunctionDemo { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Jackson Zhang!
评论
ValineDisqus