二、函数式接口

本文详细介绍了Java的四大内置函数式接口:Consumer、Supplier、Function和Predicate,通过实际代码展示了它们在处理数据和逻辑判断中的应用。包括消费型接口处理数据操作,供给型接口生成对象,函数型接口转换数据类型,以及断定型接口判断条件。

目录

第一节:java四大内置核心函数式接口

一、java四大内置核心函数式接口

1、comsumer消费型接口

2、supplier供给型接口

3、Function函数型接口,r>

4、Predicate(T)断定型接口

二、逐一演示java四大内置核心函数式接口

1、comsumer消费型接口演示

2、supplier供给型接口演示

3、Function函数型接口演示,r>

4、Predicate(T)断定型接口演示

三、其他接口


第一节: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还提供了一些子类接口,以便我们调取使用,具体细节如下图:

 

这个具体的演示案例就省略了,非常简单,大家可以试试!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值