内置的四大核心函数式接口
java8 jdk1.8 lambda表达式(一) 入门篇
java8 jdk1.8 lambda表达式(二) 语法篇
java8 jdk1.8 lambda表达式(三) 四大核心函数式接口
内置的四大核心函数式接口(前四个)
和其他的的子接口
函数式接口 | 返回类型 | 参数类型 | 用途 |
---|---|---|---|
Consumer<,T> : 消费性接口 | void | T | 类型为 T 的对象操作 无返回值: accetp(T t) |
Supplier<,T> : 供给型接口 | T | 返回对象为T的操作,没有参数: get() | |
Function<T,R> : 函数型接口 | R | T | 对参数为T的对象操作并且返回R类型的对象的结果: apply(T,R) |
Predicate<,T> : 判断性接口 | bool | T | 对参数为T的对象进行操作判断,并返回bool类型,:boolean test(T t) |
. | . | . | . |
BiFunction<T,U,R> | R | T , U | R apply(T t,U u); |
UnaryOperator<,T> : Function子接口 | T | T | T apply(T t); |
BinaryOperator<,T> : BiFUnction子接口 | T | T , T | T Tapply(T t1,T t2); |
BiConsumer<T,U> | void | T , U | void accept(T t,U u); |
. | . | . | . |
ToIntFunction<,T> | int | T | "计算 int 的值 |
ToLongFunction<,T> | long | T | 计算 long 的值 |
ToDoubleFunction<,T> | double | T | 计算 Double 的值 |
. | . | . | . |
IntFunction<,R> | R | int | 计算 int 的值 |
LongFunction<,R> | R | long | 计算 long 的值 |
DoubleFunction<,R> | R | double | 计算 double 的值 |
示例:
consumer (消费型接口:有参数无返回值)
类型为 T 的对象操作 无返回值: accetp(T t)
@Test
public void test1(){
happy(100,x -> System.out.println("大保健消费:"+(x-5)));
}
public void happy(double money, Consumer<Double> consumer){
consumer.accept(money);
}
结果:
大保健消费:95.0
Supperlier<,T> (供给型接口 没有参数,有返回值)
返回对象为T的操作,没有参数: get()
@Test
public void test2(){
List<Integer> numList = getNumList(10, () ->(int)(Math.random()*100));
for (Integer i: numList) {
System.out.println(i);
}
}
public List<Integer> getNumList(int num, Supplier<Integer> supplier){
List<Integer> list = new ArrayList<>();
for (int i = 0; i < num; i++) {
Integer integer = supplier.get();
list.add(integer);
}
return list;
}
结果:
18
85
68
16
56
87
59
53
37
39
Function<T,R> (函数型接口 有参数,有返回值)
对参数为T的对象操作并且返回R类型的对象的结果: apply(T,R)
@Test
public void test3(){
String s = strHandler(" asdfghjkl", x -> x.trim());
System.out.println(s);
String s1 = strHandler("1234567890",x -> x.substring(2,6));
System.out.println(s1);
}
public String strHandler(String str, Function<String,String> function){
return function.apply(str);
}
结果:
asdfghjkl
3456
Predicate 判断性接口 (有参数,返回类型为bool)
对参数为T的对象进行操作判断,并返回bool类型,:boolean test(T t)
@Test
public void test4(){
List<String> list = Arrays.asList("hello","xyy","lambda","www","ok");
List<String> strings = filterStr(list, x -> x.length() > 3);
System.out.println(strings);
}
public List<String> filterStr(List<String> strings, Predicate<String> predicate){
List<String> strlist = new ArrayList<>();
for (String str: strings) {
if(predicate.test(str)){ //调用判断方法
strlist.add(str);
}
}
return strlist;
}
结果:
[hello, lambda]
四大核心函数式接口完犊子了!!!