怎么在java8中对函数进行引用
怎么在java8中对函数进行引用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
创新互联公司主营繁昌网站建设的网络公司,主营网站建设方案,重庆APP开发,繁昌h5微信小程序搭建,繁昌网站营销推广欢迎繁昌等地区企业咨询
函数引用的类型
函数引用分为以下四种:
- 静态函数,比如 Integer 类的 parseInt 函数,可以写作
Integer::parseInt
- 对象级别函数的引用,比如 String 类的 length 函数,可以写作
String::length
- 具体实例的函数的引用,比如名称为 expensiveTransaction 的一个实例的 getValue,写作
expensiveTransaction::getValue
- 构造函数的引用
静态函数
比如:
FunctionstringToInteger = (String s) -> Integer.parseInt(s);
可以写作:
FunctionstringToInteger = Integer::parseInt;
对象级别函数的引用
BiPredicate, String> contains = (list, element) -> list.contains(element);
可以写作:
BiPredicate, String> contains = List::contains;
构造函数的引用
下面再举一个构造函数的例子, 首先定义一个函数式接口,唯一的方法 get 返回指定类型的对象。
@FunctionalInterface public interface Supplier{ T get(); }
Supplierconstructor = () -> new TantanitReader(); TantanitReader tantanitReader = constructor.get();
上述代码的 lambda 表达式 new 并返回一个新的对象,使得 constructor 变量成为一个构造器的引用。
等价于以下函数引用:
Supplierconstructor2 = TantanitReader::new; TantanitReader tantanitReader2 = constructor2.get();
以上的例子都是没有参数的情况,下面仍然以构造函数为例,介绍有参数的情况:
public TantanitReader(String loginName) { this.loginName = loginName; }
Functionconstructor3 = (loginName) -> new TantanitReader(loginName); TantanitReader tantanitReader3 = constructor3.apply("jack"); Function constructor4 = TantanitReader::new; TantanitReader tantanitReader4 = constructor4.apply("jack"); TantanitReader tantanitReader5 = constructor4.apply("tom");
这时由于函数只有一个参数,可以使用 Java 自带的 Function这个函数式接口,它实际起作用的函数如下:
R apply(T t);
作用为根据一个参数,返回一个结果。我们由此可以使用 constructor4 以及相应的函数引用 constructor5。
小结
使用函数引用不仅可以简化 lambda 表达式,而且在语义上可以更加专注于方法名称,也就是要做的事,抽象级别更加接近人类的认知。所以,应当尽可能使用函数引用。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。
本文题目:怎么在java8中对函数进行引用
文章地址:http://pwwzsj.com/article/gjeghh.html