本文将针对Lambda表达式进一步了解与学习,在使用Lambda表达式之前,有一个东西非常重要,那就是函数式接口,接下来,本文将讲解Java8内置的四大核心函数式接口。
代码语言:javascript复制一、Function<T, R>:函数型接口(R apply(T t))
/**
* 字符串操作
* @param str 需要处理得字符串
* @param fun Function接口
* @return 处理之后得字符串
*/
public String operatorStr(String str,Function<String,String> fun){
return fun.apply(str);
}
/**
* 函数型接口:Function<T,R>
*/
@Test
public void test5(){
String s=operatorStr("中国四大名著",str->str.substring(0,2));
System.out.println(s);
}
上面就是一个函数型接口,输入一个类型得参数,输出一个类型得参数,当然两种类型可以一致。
代码语言:javascript复制二、Consumer<T>:消费型接口(void accept(T t))
public void consumerMoney(double money,Consumer<Double> c){
c.accept(money);
}
/**
* 消费型接口Consumer<T>
*/
@Test
public void test6(){
consumerMoney(368,x->System.out.println("昨日买了个表,花了" x "元人民币。"));
}
以上为消费型接口,有参数,无返回值类型的接口。
代码语言:javascript复制三、Supplier<T>:供给型接口(T get())
/**
* 随机产生sum个数量得集合
* @param sum 集合内元素个数
* @param sup Supplier<T> 供给型接口
* @return
*/
public List<Integer> randomNum(int sum, Supplier<Integer> sup){
List<Integer> list=new ArrayList<>();
for(int i=0;i<sum;i ){
list.add(sup.get());
}
return list;
}
/**
* 供给型接口,Supplier<T>
*/
@Test
public void test7(){
Random r=new Random();
List<Integer> list=randomNum(10,()->r.nextInt());
list.forEach(System.out::println);
}
上面就是一个供给类型得接口,只有产出,没人输入,就是只有返回值,没有入参
代码语言:javascript复制四、Predicate<T>:断言型接口(boolean test(T t))
/**
* 过滤字符串
* @param list 待过滤的字符串列表
* @param pre 断言型接口:Predicate<T>
* @return 过滤后新的字符串列表
*/
public List<String> filterStr(List<String> list, Predicate<String> pre){
List<String> filterList=new ArrayList<>();
for(String str : list){
if(pre.test(str))
filterList.add(str);
}
return filterList;
}
@Test
public void test8(){
List<String> list=new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
list.add("赵六");
list.add("田七");
list.add("王八");
list.add("何九");
filterStr(list,str->!str.startsWith("王")).forEach(System.out::println);
}
上面就是一个断言型接口,输入一个参数,输出一个boolean类型得返回值。
其他类型的一些函数式接口
除了上述的四大类型函数式接口外还有其他的一些接口供我们使用: 1. BiFunction<T, U, R>
其中T,U是2个入参参数类型,R为返回值。方法R apply(T, U)
2.UnaryOperator<T>(Function子接口)
其中T是入参参数类型,进行一元操作,并返回T类型。方法T apply(T)
3. BinaryOperator<T>(BiFunction子接口)
其中T是入参参数类型,进行二元操作,并返回T类型。方法T apply(T,T)
4.BiConsumcr(T, U)
其中T,U是2个入参参数类型,无返回值。方法void accept(T, U)
5.ToIntFunction<T>、ToLongFunction<T>、ToDoubleFunction<T>
其中T是入参参数类型,返回值分别为int,long,double,分别计算int,long,double的函数。
6.IntFunction<R>、LongFunction<R>、DoubleFunction<R> 参数分别为int,long,double,返回值为R。
以上就是java8内置的核心函数式接口,其中包括了大部分得方法类型,所以可以在使用得时候根据不同得使用场景去选择不同得接口使用。