目录
第一节:java四大内置核心函数式接口
我们前面讲过,lambad表达式的使用是需要函数式接口对其进行支持的,那么我们岂不是要声明很多个函数式接口!其实大可不必,因为java已经帮我们内置了很多函数式接口。
下面我们来了解一下这块的内容。
一、java四大内置核心函数式接口
1、comsumer<T>消费型接口
该接口参数类型为泛型T,无返回值,用于对类型为T的对象应用操作,包含方法为void accept(T t);
2、supplier<T>供给型接口
该接口中的方法无参数,返回类型为泛型T,用于返回类型为T的对象,包含方法为T get();
3、Function<T,R>函数型接口
该接口中的抽象方法参数为泛型T,返回值为泛型R,用于对类型为T的对象应用操作,并返回结果为R类型的对象。包含方法为R apply(T t);
4、Predicate(T)断定型接口
该接口中的方法参数为泛型T,返回值为boolean,用于确定类型T的对象是否满足某约束,并返回boolean值。包含方法为boolean test(T t);
二、逐一演示java四大内置核心函数式接口
1、comsumer<T>消费型接口演示
实现代码:
| package 支持lambad的接口测试;
import java.util.function.Consumer;
public class TestLambad1 {
/** * 演示消费性接口 */ public static void testConsumer() { //消费大保健 happy(10000,(m)->System.out.println("消费大保健,每次消费"+m+"元")); //消费小保健 happy(10000,(m)->System.out.println("消费小保健,每次消费"+m+"元")); }
/** * 演示消费性接口 * @param money * @param con */ public static void happy(double money,Consumer<Double> con) { con.accept(money); }
public static void main(String[] args) { testConsumer(); }
} |
运行效果:
| 消费大保健,每次消费10000.0元 消费小保健,每次消费10000.0元 |
2、supplier<T>供给型接口演示
实现代码:
| package 支持lambad的接口测试;
import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; import java.util.function.Supplier;
public class TestLambad1 {
/** * 演示供给型接口 */ public static void testSupplier() { //产生十个随机数 List<Integer> list = supplier(10,()->(int)(Math.random()*100)); list.forEach(i->System.out.println(i)); }
/** * 演示supplier接口 * 需求:每次产生指定个数的Integer类型的数据, * 加入到list集合中 * @param num * @param sup * @return */ public static List<Integer> supplier(int num,Supplier<Integer> sup) { List<Integer> list = new ArrayList<Integer>(); for(int i=0;i<num;i++) { list.add(sup.get()); } return list; }
public static void main(String[] args) { //testConsumer(); testSupplier(); } } |
运行效果:
| 20 67 70 58 76 39 25 7 35 20 |
3、Function<T,R>函数型接口演示
实现代码:
| package 支持lambad的接口测试;
import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier;
public class TestLambad1 {
/** * 演示函数式接口 */ public static void testFun() { //对字符串进行去空格处理 String resStr = strHandler("I love fly",(str)->str.replaceAll(" ","")); System.out.println(resStr); }
//需求:处理字符串 public static String strHandler(String str,Function<String,String> fun) { return fun.apply(str); }
public static void main(String[] args) { testFun(); } } |
运行效果:
| Ilovefly |
4、Predicate(T)断定型接口演示
实现代码:
| package 支持lambad的接口测试;
import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Predicate; import java.util.function.Supplier; import javax.swing.plaf.synth.SynthSpinnerUI;
public class TestLambad1 { /** * 演示断言型接口 */ public static void testPredicate() { List<String> list = new ArrayList<String>(); list.add("java"); list.add("oracle"); list.add("mysql"); //将产长度大于5的字符串过滤出来 List<String> filterStrList = filterStr(list,s->s.length()>4); filterStrList.forEach(e->System.out.println(e)); }
/** * 演示断言型接口 * 需求:将满足条件的字符串添加到集合中 * @param list * @param pre * @return */ public static List<String> filterStr(List<String> list,Predicate<String> pre){ List<String> strList = new ArrayList<String>(); for(String str:list) { if(pre.test(str)) { strList.add(str); } } return strList; } public static void main(String[] args) { //testConsumer(); //testSupplier(); //testFun(); testPredicate(); } } |
运行效果:
| oracle mysql |
三、其他接口
对于内置的四大核心函数式接口,java还提供了一些子类接口,以便我们调取使用,具体细节如下图:
|
|
这个具体的演示案例就省略了,非常简单,大家可以试试!
本文详细介绍了Java的四大内置函数式接口:Consumer、Supplier、Function和Predicate,通过实际代码展示了它们在处理数据和逻辑判断中的应用。包括消费型接口处理数据操作,供给型接口生成对象,函数型接口转换数据类型,以及断定型接口判断条件。

7296

被折叠的 条评论
为什么被折叠?



