jdk内置的函数式接口
基于尚硅谷java8教程
1. jdk内置的主要函数接口说明
函数式接口 | 参数类型 | 返回类型 | 用途 |
---|---|---|---|
Consumer<T> 消费型接口 | T | void | 对类型为T的对象进行操作,包含方法:void accept(T t) |
Supplier<T> 供给型接口 | 无 | T | 返回类型为T的对象。包含方法:T get() |
Function<T,R> 函数型接口 | T | R | 对类型为T的对象应用操作,并返回结果。结果是R类型的对象。包含方法: R apply(T t) |
Predicate<T> 断定型接口 | T | Boolean | 确定类型为T的对象是否满足某约束。并返回boolean值。包含方法:boolean test(T t) |
2. jdk内置的其他函数接口
其他函数接口基本上从4个主要函数接口中派生出来的。举例如下
函数式接口 | 参数类型 | 返回类型 | 用途 |
---|---|---|---|
BiFunction<T,U,R> | T,U | R | 对类型为T,U参数应用操作返回R类型结果,包含方法:R apply(T t,U u) |
UnaryOperator<T> (Function子接口) | T | T | 对类型为T的对象进行一元运算,并返回T类型的结果,包含方法:T apply(T t) |
BinaryOperator<T> (BiFunction子接口) | T,T | T | 对类型为T的对象进行二元运算,并为T类型结果,包含方法:T apply(T t1, T t2) |
BiConsumer<T,U> | T,U | void | 对类型为T,U参数应用操作,包含方法:void accept(T t,U u) |
ToIntFunction<T> | T | int | 计算int值的函数 |
ToLongFunction<T> | T | long | 计算long值的函数 |
ToDoubleFunction<T> | T | double | 计算double值的函数 |
IntFunction<R> | int | R | 参数为int类型的函数 |
LongFunction<R> | long | R | 参数为long类型的函数 |
DoubleFunction<R> | double | R | 参数为double类型的函数 |
3. 范例
package com.seven.jdk8;
import com.seven.pojo.Employee;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
/**
* jdk8内置的函数式接口的使用
*/
public class BuildinFunctionTest {
List<Employee> employeeList = Arrays.asList(
new Employee(1,"张三",7753.25,30),
new Employee(2,"李四",1853.25,18),
new Employee(3,"王五",9753.25,51),
new Employee(4,"赵六",5653.25,45),
new Employee(5,"钱七",2553.25,27)
);
/*消费性接口*/
void cost(double money, Consumer<Double> con){
con.accept(money);
}
@Test
public void test1(){
cost(300,(i)->System.out.println("消费支出"+i));
}
/*供给型接口*/
List<Integer> apply(long num, Supplier<Integer> sup){
//按照提供的num提供指定个数的随机数
List<Integer> list = new ArrayList<>();
for(long i = 0L;i<num;i++){
list.add(sup.get());
}
return list;
}
@Test
public void test2(){
List<Integer> list = apply(5,()->(int)(Math.random()*100));
list.stream().forEach(System.out::println);
}
/*函数型接口*/
String changeStr(String str, Function<String,String> fun){
return fun.apply(str);
}
@Test
public void test3(){
String str = "\t\t\tabc ";
System.out.println( changeStr(str,s ->s.toUpperCase()) );
System.out.println( changeStr(str, s -> s.trim()) );
}
/*断言型接口*/
void check(int i, Predicate<Integer> pre){
if(pre.test(i)){
System.out.println("当前输入的值大于0");
}else{
System.out.println("当前输入的值小于0");
}
}
@Test
public void test4(){
check(3,i -> i>0);
check(-5,i -> i>0);
}
}
源代码地址:http://git.oschina.net/johnny/java_base