函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。Java8定义了大量在lambda表达式中广泛使用的函数接口。下面是java.util.Function包中定义的函数接口的列表。
以下是Java8中的接口列表。| Sr.No. | Interface & Remark |
|---|---|
| 1 |
BiConsumer<T,U>,u> 代表了一个接受两个输入参数的操作,并且不返回任何结果 |
| 2 |
BiFunction<T,U,R>,u,r> 代表了一个接受两个输入参数的方法,并且返回一个结果 |
| 3 |
BinaryOperator<T> 代表了一个作用于于两个同类型操作符的操作,并且返回了操作符同类型的结果 |
| 4 |
BiPredicate<T,U>,u> 代表了一个两个参数的boolean值方法 |
| 5 |
BooleanSupplier 用于接收lambda表达式所返回的boolean值结果 |
| 6 |
Consumer<T> 代表了接受一个输入参数并且无返回的操作 |
| 7 |
DoubleBinaryOperator 代表了作用于两个double值操作符的操作,并且返回了一个double值的结果。 |
| 8 |
DoubleConsumer 代表一个接受double值参数的操作,并且不返回结果。 |
| 9 |
DoubleFunction<R> 代表接受一个double值参数的方法,并且返回结果 |
| 10 |
DoublePredicate 代表一个拥有double值参数的boolean值方法 |
| 11 |
DoubleSupplier 代表一个double值结构的提供方 |
| 12 |
DoubleToIntFunction 接受一个double类型输入,返回一个int类型结果。 |
| 13 |
DoubleToLongFunction 接受一个double类型输入,返回一个long类型结果 |
| 14 |
DoubleUnaryOperator 接受一个参数同为类型double,返回值类型也为double 。 |
| 15 | Function<T,R> 接受一个输入参数,返回一个结果。 |
| 16 |
IntBinaryOperator 接受两个参数同为类型int,返回值类型也为int 。 |
| 17 |
IntConsumer 接受一个int类型的输入参数,无返回值 。 |
| 18 |
IntFunction<R> 接受一个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<R> 接受一个long类型输入参数,返回一个结果。 |
| 27 |
LongPredicate R接受一个long输入参数,返回一个布尔值类型结果。 |
| 28 |
LongSupplier 无参数,返回一个结果long类型的值。 |
| 29 |
LongToDoubleFunction 接受一个long类型输入,返回一个double类型结果。 |
| 30 |
LongToIntFunction 接受一个long类型输入,返回一个int类型结果。 |
| 31 |
LongUnaryOperator 接受一个参数同为类型long,返回值类型也为long。 |
| 32 |
ObjDoubleConsumer<T> 接受一个object类型和一个double类型的输入参数,无返回值。 |
| 33 |
ObjIntConsumer<T> 接受一个object类型和一个int类型的输入参数,无返回值。 |
| 34 |
ObjLongConsumer<T> 接受一个object类型和一个long类型的输入参数,无返回值。 |
| 35 | Predicate<T> 接受一个输入参数,返回一个布尔值结果。 |
| 36 | Supplier<T> 无参数,返回一个结果。 |
| 37 |
ToDoubleBiFunction<T,U>,u> 接受两个输入参数,返回一个double类型结果 |
| 38 |
ToDoubleFunction<T> 接受一个输入参数,返回一个double类型结果 |
| 39 |
ToIntBiFunction<T,U>,u> 接受两个输入参数,返回一个int类型结果。 |
| 40 |
ToIntFunction<T> 接受一个输入参数,返回一个int类型结果。 |
| 41 |
ToLongBiFunction<T,U>,u> 接受两个输入参数,返回一个long类型结果。 |
| 42 |
ToLongFunction<T> 接受一个输入参数,返回一个long类型结果。 |
| 43 |
UnaryOperator<T> 接受一个参数为类型T,返回值类型也为T。 |
Predicate <T> 接口是一个函数式接口,它接受一个输入参数 T,返回一个布尔值结果。该接口包含多种默认方法来将Predicate组合成其他复杂的逻辑(比如:与,或,非)。用于测试对象是 true 或 false。
Java8Tester.java
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
public class Java8Tester {
public static void main(String args[]) {
List<Integer> list=Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
</span><span class="com">//Predicate<Integer> predicate=n -> true</span><span class="pln">
</span><span class="com">//n is passed as parameter to test method of Predicate interface</span><span class="pln">
</span><span class="com">//test method will always return true no matter what value n has.</span><span class="pln">
</span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"Print all numbers:"</span><span class="pun">);</span><span class="pln">
</span><span class="com">//将n作为参数</span><span class="pln">
</span><span class="kwd">eval</span><span class="pun">(</span><span class="pln">list</span><span class="pun">,</span><span class="pln"> n</span><span class="pun">-></span><span class="kwd">true</span><span class="pun">);</span><span class="pln">
</span><span class="com">//Predicate<Integer> predicate1=n -> n%2 == 0</span><span class="pln">
</span><span class="com">//n is passed as parameter to test method of Predicate interface</span><span class="pln">
</span><span class="com">//test method will return true if n%2 comes to be zero</span><span class="pln">
</span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"Print even numbers:"</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">eval</span><span class="pun">(</span><span class="pln">list</span><span class="pun">,</span><span class="pln"> n</span><span class="pun">-></span><span class="pln"> n</span><span class="pun">%</span><span class="lit">2</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
</span><span class="com">//Predicate<Integer> predicate2=n -> n > 3</span><span class="pln">
</span><span class="com">//n is passed as parameter to test method of Predicate interface</span><span class="pln">
</span><span class="com">//test method will return true if n is greater than 3.</span><span class="pln">
</span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"Print numbers greater than 3:"</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">eval</span><span class="pun">(</span><span class="pln">list</span><span class="pun">,</span><span class="pln"> n</span><span class="pun">-></span><span class="pln"> n </span><span class="pun">></span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
}
public static void eval(List<Integer> list, Predicate<Integer> predicate) {
</span><span class="kwd">for</span><span class="pun">(</span><span class="typ">Integer</span><span class="pln"> n</span><span class="pun">:</span><span class="pln"> list</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="kwd">if</span><span class="pun">(</span><span class="pln">predicate</span><span class="pun">.</span><span class="pln">test</span><span class="pun">(</span><span class="pln">n</span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="pln">n </span><span class="pun">+</span><span class="pln"> </span><span class="str">" "</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
}
}
这里无涯教程传递了断言接口,它接受一个输入并返回Boolean。
使用javac编译器编译类,如下所示-
C:\JAVA>javac Java8Tester.java
现在运行Java8Tester,如下所示-
C:\JAVA>java Java8Tester
它应该生成以下输出-
Print all numbers: 1 2 3 4 5 6 7 8 9 Print even numbers: 2 4 6 8 Print numbers greater than 3: 4 5 6 7 8 9