Java新特性之函数式接口
Posted 天天IT
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java新特性之函数式接口相关的知识,希望对你有一定的参考价值。
什么是函数式接口
只包含一个抽象方法的接口,称为函数式接口。
你可以通过 Lambda 表达式来创建该接口的对象。(若 Lambda 表达式抛出一个受检异常,那么该异常需要 在目标接口的抽象方 法上进行声明)。
我们可以在任意函数式接口上使用
@FunctionalInterface
注解, 这样做可以检查它是否是一个函数式接口,同时 javadoc 也会包 含一条声明,说明这个接口是一个函数式接口
自定义函数式接口
@FunctionalInterface
public interface MyNumFun {
double getValue();
}
//函数式接口中使用泛型
@FunctionalInterface
public interface MyFunc<T> {
T getValue(T t);
}
作为参数传递 Lambda 表达式
public String toUpperString(MyFun<String> mf ,String str){
return mf.getValue(str);
}
//作为参数传递 Lambda 表达式
String newStr = toUpperString (str -> str.toUpperCase(),"abcd");
System.out.println(newStr);
作为参数传递 Lambda 表达式:为了将 Lambda 表达式作为参数传递,接
口Lambda 表达式的参数类型必须是与该 Lambda 表达式兼容的函数式接口
的类型。
四大函数式接口
函数式接口 | 参数类型 | 返回类型 | 描述 |
---|---|---|---|
Consumer
消费型接口 |
T | void | 对类型为T的对象应用操作,包含方法: void accept(T t) |
Supplier
供给型接口 |
无 | T | 返回类型为T的对象,包含方法: T get() |
Consumer
函数型接口 |
T | R | 对类型为T的对象应用操作,并返回结果.结果的类型为R类型的对象,包含方法: R apply(T t) |
Consumer
断言型接口 |
T | boolean | 确定类型为T的对象是否满足某个约束,并对返回boolean 值.包含方法 boolean test(T t) |
Consumer
:消费型接口 void accept(T t);
@Test
public void test1(){
accept(100,x-> System.out.println("小明花了:"+x +"元买了一个足球"));
}
public void accept(Integer i,Consumer<Integer> con){
con.accept(i);
}
Supplier
:供给型接口 T get();
//需求 产生制定个数的整数,并放入集合
@Test
public void test2(){
List<Integer> numList = getNumList(10,() -> (int)(Math.random() * 100));
for (Integer num : numList) {
System.out.println(num);
}
}
public List<Integer> getNumList(int num, Supplier<Integer> supplier){
List<Integer> list = new ArrayList<>();
for (int i = 0; i < num ; i++) {
list.add(supplier.get());
}
return list;
}
Function
:函数型接口 R apply(T t);
@Test
public void test3(){
String newStr = strHandler("qwewertasd" , x -> x.toUpperCase());
System.out.println(newStr);
}
public String strHandler(String str, Function<String , String > fun){
return fun.apply(str);
}
Predicate
:断言型接口 boolean test(T t);
@Test
public void test4(){
boolean result = getPredicate(100, x -> x > 500);
System.out.println(result);
}
public boolean getPredicate(Integer moner, Predicate<Integer > predicate){
return predicate.test(moner);
}
所有函数式接口
序号 | 接口 | 描述 |
---|---|---|
1 | BiConsumer | 代表了一个接受两个输入参数的操作,并且不返回任何结果 |
2 | BiFunction | 代表了一个接受两个输入参数的方法,并且返回一个结果 |
3 | BinaryOperator | 代表了一个作用于于两个同类型操作符的操作,并且返回了操作符同类型的结果 |
4 | BiPredicate | 代表了一个两个参数的boolean值方法 |
5 | BooleanSupplier | 代表了boolean值结果的提供方 |
6 | Consumer | 代表了接受一个输入参数并且无返回的操作 |
7 | DoubleBinaryOperator | 代表了作用于两个double值操作符的操作,并且返回了一个double值的结果。 |
8 | DoubleConsumer | 代表一个接受double值参数的操作,并且不返回结果。 |
9 | DoubleFunction | 代表接受一个double值参数的方法,并且返回结果 |
10 | DoublePredicate | 代表一个拥有double值参数的boolean值方法 |
11 | DoubleSupplier | 代表一个double值结构的提供方 |
12 | DoubleToIntFunction | 接受一个double类型输入,返回一个int类型结果。 |
13 | DoubleToLongFunction | 接受一个double类型输入,返回一个long类型结果 |
14 | DoubleUnaryOperator | 接受一个参数同为类型double,返回值类型也为double 。 |
15 | Function | 接受一个输入参数,返回一个结果。 |
16 | IntBinaryOperator | 接受两个参数同为类型int,返回值类型也为int 。 |
17 | IntConsumer | 接受一个int类型的输入参数,无返回值 。 |
18 | IntFunction | 接受一个int类型输入参数,返回一个结果 。 |
19 | IntPredicate | 接受一个int输入参数,返回一个布尔值的结果。 |
20 | IntSupplier | 无参数,返回一个int类型结果。 |
21 | IntToDoubleFunction | 接受一个int类型输入,返回一个double类型结果 。 |
22 | IntToLongFunction | 接受一个int类型输入,返回一个long类型结果。 |
23 | IntUnaryOperator | 接受一个参数同为类型int,返回值类型也为int 。 |
24 | LongBinaryOperator | 接受两个参数同为类型long,返回值类型也为long。 |
25 | LongConsumer | 接受一个long类型的输入参数,无返回值。 |
26 | LongFunction | 接受一个long类型输入参数,返回一个结果。 |
27 | LongPredicate | R接受一个long输入参数,返回一个布尔值类型结果。 |
28 | LongSupplier | 无参数,返回一个结果long类型的值。 |
29 | LongToDoubleFunction | 接受一个long类型输入,返回一个double类型结果。 |
30 | LongToIntFunction | 接受一个long类型输入,返回一个int类型结果。 |
31 | LongUnaryOperator | 接受一个参数同为类型long,返回值类型也为long。 |
32 | ObjDoubleConsumer | 接受一个object类型和一个double类型的输入参数,无返回值。 |
33 | ObjIntConsumer | 接受一个object类型和一个int类型的输入参数,无返回值。 |
34 | ObjLongConsumer | 接受一个object类型和一个long类型的输入参数,无返回值。 |
35 | Predicate | 接受一个输入参数,返回一个布尔值结果。 |
36 | Supplier | 无参数,返回一个结果。 |
37 | ToDoubleBiFunction<T,U | 接受两个输入参数,返回一个double类型结果 |
38 | ToDoubleFunction | 接受一个输入参数,返回一个double类型结果 |
39 | ToIntBiFunction | 接受两个输入参数,返回一个int类型结果。 |
40 | ToIntFunction | 接受一个输入参数,返回一个int类型结果。 |
41 | ToLongBiFunction | 接受两个输入参数,返回一个long类型结果。 |
42 | ToLongFunction | 接受一个输入参数,返回一个long类型结果。 |
43 | UnaryOperator | 接受一个参数为类型T,返回值类型也为T。 |
以上是关于Java新特性之函数式接口的主要内容,如果未能解决你的问题,请参考以下文章
Java8新特性——Lambda表达式之基本语法 & 自定义函数式接口