java8 Funciton和BiFunction都是功能性接口,Function包含一个入参(T),一个出参(R),输入输出可以是不不同的类型,BiFunction包含两个入参T和R,一个出参R。
1、Function
下面这个例子展示了一个输入参数 String类型,然后输出一个 Integer类型
package com.cattles.function;
import java.util.function.Function;
/**
* @author cattle - 稻草鸟人
* @date 2020/3/1 下午5:40
*/
public class Java8Function1 {
public static void main(String[] args) {
Function func = x -> x.length();
Integer apply = func.apply("cattle");
System.out.println(apply);
}
}
输出:
6
2、Function addThen和compose
package com.cattles.function;
import java.util.function.Function;
/**
* @author cattle - 稻草鸟人
* @date 2020/3/1 下午5:45
*/
public class Java8Function2 {
public static void main(String[] args) {
Function func1 = x -> x.length();
Function func2 = x -> x * 2;
Integer ret = func1.andThen(func2).apply("cattle");
System.out.println(ret);
Integer ret2 = func2.compose(func1).apply("cattle");
System.out.println(ret2);
}
}
输出:
12
12
**问题:**思考addThen和compose的区别
3、Function复杂一些的例子
package com.cattles.function;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Base64;
import java.util.List;
import java.util.function.Function;
/**
* @author cattle - 稻草鸟人
* @date 2020/3/1 下午10:43
*/
public class Java8Function3 {
public static void main(String[] args) {
Java8Function3 obj = new Java8Function3();
List list = Arrays.asList("java", "python", "C#", "PHP", "javascript");
List ret = obj.list(list, obj::base64);
ret.forEach(System.out::println);
}
public List list(List list, Function function) {
List ret = new ArrayList<>();
for (T t : list) {
ret.add(function.apply(t));
}
return ret;
}
public String base64(String st) {
return Base64.getEncoder().encodeToString(st.getBytes());
}
}
输出:
amF2YQ==
cHl0aG9u
QyM=
UEhQ
amF2YXNjcmlwdA==
4、BiFunction
package com.cattles.function;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.BiFunction;
/**
* @author cattle - 稻草鸟人
* @date 2020/3/1 下午10:54
*/
public class Java8BiFunction1 {
public static void main(String[] args) {
BiFunction func = (T, U) -> T * U;
System.out.println(func.apply(3, 4));
Java8BiFunction1 obj = new Java8BiFunction1();
List list1 = Arrays.asList("a", "b", "c");
List list2 = Arrays.asList(1, 2, 3);
List result = obj.listCombiner(list1, list2, (a, b) -> a + b);
System.out.println(result);
}
private List listCombiner(
List list1, List list2, BiFunction combiner) {
List result = new ArrayList<>();
for (int i = 0; i < list1.size(); i++) {
result.add(combiner.apply(list1.get(i), list2.get(i)));
}
return result;
}
}
输出:
12
[a1, b2, c3]
5、BiFunction addThen
package com.cattles.function;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.BiFunction;
import java.util.function.Function;
/**
* @author cattle - 稻草鸟人
* @date 2020/3/1 下午11:02
*/
public class Java8BiFunction2 {
public static void main(String[] args) {
BiFunction func1 = (T, U) -> T + U;
Function func2 = x -> x + " Java";
System.out.println(func1.andThen(func2).apply("I", " Love"));
List list1 = Arrays.asList("a", "b", "c");
List list2 = Arrays.asList("1", "2", "3");
Java8BiFunction2 obj = new Java8BiFunction2();
List result = obj.listCombiner(list1, list2, String::concat);
System.out.println(result);
}
private List listCombiner(
List list1, List list2, BiFunction combiner) {
List result = new ArrayList<>();
for (int i = 0; i < list1.size(); i++) {
result.add(combiner.apply(list1.get(i), list2.get(i)));
}
return result;
}
}
输出:
I Love Java
[a1, b2, c3]