BiFunction示例
BiFunction示例
在Java8中,BiFunction是函数接口,它接收两个实参,返回一个对象
BiFunction.java
@FunctionalInterface
public interface BiFunction<T, U, R> {R apply(T t, U u);}
- T——function第一个实参的类型
- U——function第二个实参的类型
- R——function返回的结果类型
BiFunction<T, U, R>
下面这个示例演示了接收两个Integer参数,返回Integer、Double或List
import java.util.Arrays;
import java.util.List;
import java.util.function.BiFunction;public class Java8BiFunction1 {public static void main(String[] args) {// takes two Integers and return an IntegerBiFunction<Integer, Integer, Integer> func = (x1, x2) -> x1 + x2;Integer result = func.apply(2, 3);System.out.println(result); // 5// take two Integers and return an DoubleBiFunction<Integer, Integer, Double> func2 = (x1, x2) -> Math.pow(x1, x2);Double result2 = func2.apply(2, 4);System.out.println(result2); // 16.0// take two Integers and return a List<Integer>BiFunction<Integer, Integer, List<Integer>> func3 = (x1, x2) -> Arrays.asList(x1 + x2);List<Integer> result3 = func3.apply(2, 3);System.out.println(result3);}}
输出
5
16.0
[5]
BiFunction<T, U, R>和Function<T, R>
BiFunction需要两个Integer参数,返回返回一个double,接着使用andThen()链接它给Function,将Double转化为String
import java.util.function.BiFunction;
import java.util.function.Function;public class Java8BiFunction2a {public static void main(String[] args) {// Math.pow(a1, a2) returns DoubleBiFunction<Integer, Integer, Double> func1 = (a1, a2) -> Math.pow(a1, a2);// takes Double, returns StringFunction<Double, String> func2 = (input) -> "Result : " + String.valueOf(input);String result = func1.andThen(func2).apply(2, 4);System.out.println(result);}
}
输出
Result : 16.0
下面这个示例将上面程序转换为一个方法,接收BiFunction和Function作为参数,并将它们链接在一起
import java.util.function.BiFunction;
import java.util.function.Function;public class Java8BiFunction2b {public static void main(String[] args) {String result = powToString(2, 4,(a1, a2) -> Math.pow(a1, a2),(r) -> "Result : " + String.valueOf(r));System.out.println(result); // Result : 16.0}public static <R> R powToString(Integer a1, Integer a2,BiFunction<Integer, Integer, Double> func,Function<Double, R> func2) {return func.andThen(func2).apply(a1, a2);}
}
输出
Result : 16.0
下面示例将上述方法转化为一个通用方法
public static <A1, A2, R1, R2> R2 convert(A1 a1, A2 a2,BiFunction<A1, A2, R1> func,Function<R1, R2> func2) {return func.andThen(func2).apply(a1, a2);
}
下面这个示例展示了这个通用方法的许多可能性:
import java.util.function.BiFunction;
import java.util.function.Function;public class Java8BiFunction2c {public static void main(String[] args) {// Take two Integers, pow it into a Double, convert Double into a String.String result = convert(2, 4,(a1, a2) -> Math.pow(a1, a2),(r) -> "Pow : " + String.valueOf(r));System.out.println(result); // Pow : 16.0// Take two Integers, multiply into an Integer, convert Integer into a String.String result2 = convert(2, 4,(a1, a2) -> a1 * a1,(r) -> "Multiply : " + String.valueOf(r));System.out.println(result2); // Multiply : 4// Take two Strings, join both, join "cde"String result3 = convert("a", "b",(a1, a2) -> a1 + a2,(r) -> r + "cde"); // abcdeSystem.out.println(result3);// Take two Strings, join both, convert it into an IntegerInteger result4 = convert("100", "200",(a1, a2) -> a1 + a2,(r) -> Integer.valueOf(r));System.out.println(result4); // 100200}public static <A1, A2, R1, R2> R2 convert(A1 a1, A2 a2,BiFunction<A1, A2, R1> func,Function<R1, R2> func2) {return func.andThen(func2).apply(a1, a2);}}
输出
Pow : 16.0
Multiply : 4
abcde
100200
Factory
下面示例展示了使用BiFunction创建一个对象,类似工厂模式
import java.util.function.BiFunction;public class Java8BiFunction3 {public static void main(String[] args) {GPS obj = factory("40.741895", "-73.989308", GPS::new);System.out.println(obj);}public static <R extends GPS> R factory(String Latitude, String Longitude,BiFunction<String, String, R> func) {return func.apply(Latitude, Longitude);}}class GPS {String Latitude;String Longitude;public GPS(String latitude, String longitude) {Latitude = latitude;Longitude = longitude;}public String getLatitude() {return Latitude;}public void setLatitude(String latitude) {Latitude = latitude;}public String getLongitude() {return Longitude;}public void setLongitude(String longitude) {Longitude = longitude;}@Overridepublic String toString() {return "GPS{" +"Latitude='" + Latitude + '\'' +", Longitude='" + Longitude + '\'' +'}';}
}
输出
GPS{Latitude='40.741895', Longitude='-73.989308'}
GPS::new
调用下面的这个构造函数,它接收两个参数,返回一个GPS对象。
public GPS(String latitude, String longitude) {Latitude = latitude;Longitude = longitude;}
更多示例
通过一些条件过滤List
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.BiFunction;public class Java8BiFunction4 {public static void main(String[] args) {Java8BiFunction4 obj = new Java8BiFunction4();List<String> list = Arrays.asList("node", "c++", "java", "javascript");List<String> result = obj.filterList(list, 3, obj::filterByLength);System.out.println(result); // [node, java, javascript]List<String> result1 = obj.filterList(list, 3, (l1, size) -> {if (l1.length() > size) {return l1;} else {return null;}});System.out.println(result1); // [node, java, javascript]List<String> result2 = obj.filterList(list, "c", (l1, condition) -> {if (l1.startsWith(condition)) {return l1;} else {return null;}});System.out.println(result2); // [c++]List<Integer> number = Arrays.asList(1, 2, 3, 4, 5);List<Integer> result3 = obj.filterList(number, 2, (l1, condition) -> {if (l1 % condition == 0) {return l1;} else {return null;}});System.out.println(result3); // [2, 4]}public String filterByLength(String str, Integer size) {if (str.length() > size) {return str;} else {return null;}}public <T, U, R> List<R> filterList(List<T> list1, U condition,BiFunction<T, U, R> func) {List<R> result = new ArrayList<>();for (T t : list1) {R apply = func.apply(t, condition);if (apply != null) {result.add(apply);}}return result;}
}
输出
[node, java, javascript]
[node, java, javascript]
[c++]
[2, 4]
BiFunction示例相关推荐
- 运营微信公众号个人号面临的各种问题(写给2021年想开始公众号运营的身边)
微信公众号发布后无法反复修改 微信公众号不适合写博客,一旦发布就基本无法修改,文字只能改个位数的字,图片直接无法改,出现无法容忍的错误,只能删除全文 微信公众号文章无法添加微信以外的跳转超链接 微信公 ...
- java 接口 this参数_Java BiFunction 接口实例
原标题:Java BiFunction 接口实例 www.baeldung.com/java-bifunction-interface 1. 简介 Java8 引入了函数式编程,可以把函数作为参数传入 ...
- java散列法的运用实例,Java HashMap compute() 使用方法及示例
Java HashMap compute() 使用方法及示例 Java HashMap compute()方法计算一个新值,并将其与哈希映射中的指定键相关联. compute()方法的语法为: has ...
- java 函数式编程 示例_功能Java示例 第8部分–更多纯函数
java 函数式编程 示例 这是第8部分,该系列的最后一部分称为"示例功能Java". 我在本系列的每个部分中开发的示例是某种"提要处理程序",用于处理文档. ...
- java方法示例注释 @_Java 8中的功能接口是什么? @功能注释和示例
java方法示例注释 @ 函数接口是Java 8最重要的概念之一,实际上为lambda表达式提供了动力,但是许多开发人员没有首先了解函数接口在Java 8中的作用就花了很多精力来理解它,并花时间学习l ...
- functor_纯Java中的Functor和Monad示例
functor 本文最初是我们使用RxJava进行React式编程的附录. 但是,尽管与React式编程非常相关,但对monad的介绍却不太适合. 因此,我决定将其取出并作为博客文章单独发布. 我知道 ...
- 功能Java示例 第8部分–更多纯函数
这是第8部分,该系列的最后一部分称为" Functional Java by Example". 我在本系列的每个部分中发展的示例是某种"提要处理程序",用于处 ...
- Java 8中的功能接口是什么? @功能注释和示例
函数接口是Java 8最重要的概念之一,实际上为lambda表达式提供了动力,但是许多开发人员没有首先了解函数接口在Java 8中的作用就花了很多精力来理解它,并花时间学习lambda表达式和Stre ...
- 纯Java中的Functor和Monad示例
本文最初是我们使用RxJava进行反应式编程的附录. 但是,尽管与反应式编程非常相关,但对monad的介绍却不太适合. 因此,我决定将其取出并作为博客文章单独发布. 我知道," 我自己的,对 ...
最新文章
- 分库分表之后,主键的处理方法
- 根据传入坐标和图片URL地址对图片进行切图操作、将图片转化成Base64位码
- 2019年IT人加薪的9大神器
- mysql多行合并成一行_数据文件合并与拆分
- c++ error函数_R语言中广义线性模型(GLM)中的分布和连接函数分析
- HTML中的camera标签,详解HTML5 使用video标签实现选择摄像头功能
- 聊聊JVM(九)理解进入safepoint时如何让Java线程全部阻塞
- oracle中PLSQL存储过程中如何使用逗号分隔的集合(逗号分隔字符串转换为一个集合)...
- jenkins pipeline之如何创建一个流水线
- Java小开发(车辆信息管理系统)
- Windows10系统迁移
- 虚拟机查看HWADDR(即MAC)地址
- oracle现金流量表逻辑,分析现金流量表填列法的逻辑
- 海外短视频月活1.5亿,欢聚时代拿稳全球短视频入场券?
- python 实现维基百科六度分隔原理
- Struts2远程命令执行漏洞
- Palantir Gothan 的SWOT 分析
- pscs6安装序列号
- 软考计算机英语词汇,软考计算机专业英语常用词汇(字母D-E)
- mysql已启动但无法连接_MySQL无法正常启动,Navicat连接出错,解决2003问题
热门文章
- 问题解决:AttributeError: ‘NoneType‘ object has no attribute ‘get‘
- 莫顿码Morton code的c语言实现
- 阿豪学习之:使用xshell连接linux
- 物联lot是什么意思_产品上的LOT是什么意思?
- 824. 山羊拉丁文(模拟)
- Datawhale 9月份学习笔记一之 图解Attention
- Gamma的完全理解
- java中的字符个数,增补字符
- JVM监控篇(三)- JVM监控方案之prometheus+k8s+influxdb
- 如何使用别人的github.io 博客模板