首页 > 其他分享 >函数式接口-常见函数式接口-Consumer接口

函数式接口-常见函数式接口-Consumer接口

时间:2022-10-17 17:23:56浏览次数:59  
标签:函数 accept 接口 字符串 Consumer public String

常见函数式接口

JDK提供了大量常用的函数式接口以丰富Lambda的经典使用常见 它们注意在java.util.function包中被提供

Consumer接口

Consumer<T>接口则正好与Supplier接口相反 它不是生成一个数据 而是消费一个数据 其数据类型由泛型决定

抽象方法:accept

Consumer接口中包含抽象方法void accept(T t),意为消费一个指定泛型的数据

代码:

复制代码
/*
Consumer接口是一个消费型接口 泛型执行什么类型 就可以使用accept方法消费什么类型的数据
至于具体怎么消费(使用) 需要自定义(输出,计算...)
 */
public class Demo01Consumer {
    /*
        定义一个方法
        方法的参数传递一个字符串的姓名
        方法的参数传递Consumer接口 泛型使用String
        可以使用Consumer接口消费字符串的姓名
     */
    public static void method(String name, Consumer<String> con){
        con.accept(name);
    }

    public static void main(String[] args) {
        //调用method方法 传递字符串姓名 方法的另一个参数consumer接口 是一个函数式接口 所以可以传递lambda表达式
        method("张三",(String name)->{
            //对传递的字符串进行消费
            //消费方式:直接输出字符串
            System.out.println(name);
            //消费方式:将字符串进行反转
            String reaname=new StringBuffer(name).reverse().toString();
            System.out.println(reaname);
        });
    }
}
复制代码

运行结果

 默认方法:andThen

如果一个方法的参数和返回值全都是Consumer类型 那么可以实现效果 消费数据的时候 首先做一个操作 然后再做一个操作 实现组合 而这个方法就是Consumer接口中的default方法andThem

作用:需要两个Consumer接口 可以把两个ConSumer接口组合到一起 在对数据进行消费

例如:

consumer<String> con1

consumer<String> con2

String s="hello"

con1.accept(s);

con2.accept(s);

连接两个Consumer接口 再进行消费

con1.andThen(con2).accept(s);谁写前边谁先消费

代码:

复制代码
public class Demo01AndThen {
    //定义一个方法 方法的参数传递一个字符串和两个Consumer接口 consumer接口的泛型使用字符串
    public static void method(String s, Consumer<String> con1,Consumer<String> con2){
        con1.accept(s);
        con2.accept(s);
        System.out.println("-----------------");
        //使用andThen方法 吧两个Consumer接口连接到一起 在消费
        con1.andThen(con2).accept(s);
    }

    public static void main(String[] args) {
        //调用method方法 传递一个字符串 两个Lambda表达式
        method("Hello",
                (s)->{
                    //消费方式:把字符串转换为大写输出
                    System.out.println(s.toUpperCase());
                },
                (s)->{
                    //消费方式:把字符串转换为小写输出
                    System.out.println(s.toLowerCase());
                });
    }
}
复制代码

运行结果:

 练习:格式化打印信息

题目:

下面的字符串数组当中存有多条信息 请按照格式“姓名:xx。性别:xx”的格式将信息打印出来 要求将打印姓名的动作作为第一个Consumer接口的Lambda实例 将打印性别的动作作为第二个Consumer接口的Lambda实例 将两个Consumer接口拼接到一起

代码:

复制代码
public class Demo02Consumer {
    public static void method(String[] s, Consumer<String> con1, Consumer<String> con2) {
        for (String s1 : s) {
            con1.andThen(con2).accept(s1);
        }
    }


    public static void main(String[] args) {
        String[] str = {"张三,男", "李四,女", "王五,男"};

        method(str,
                s1 ->
                        System.out.println(s1.split(",")[0]),
                s1 ->
                        System.out.println(s1.split(",")[1]));
    }
}
复制代码

运行结果:

标签:函数,accept,接口,字符串,Consumer,public,String
From: https://www.cnblogs.com/shenziyi/p/16798486.html

相关文章

  • 函数式接口-常见函数式接口-Supplier接口
    常见函数式接口JDK提供了大量常用的函数式接口以丰富Lambda的经典使用常见它们注意在java.util.function包中被提供Supplier接口Supplier<T>接口仅包含一个无参的方......
  • 持续集成下接口自动化测试实践
    目前很多持续集成项目都需要执行接口层的测试,当你了解其基本概念,理解了接口协议、如何传参、测试原理后,无需掌握程序语言,使用行业内成熟的接口测试工具,就可以快速地......
  • js 外部调用 嵌套函数
     在函外部直接调用函数的内部函数是不可以的,因为是向外查找的 所以不能直接内部函数  functionone(){functiontwo(){varb=30;......
  • C语言零基础入门—函数-习题
    C语言零基础入门—函数-习题本节课的任务是:完成5道习题。下边的题目,都需要使用函数的知识来求解(也就是编写自定义函数求解)01-二元一次函数求解求方程​​ax^2+bx+c=......
  • mysql 中使用 CONCAT 函数进行结果拼接时出现乱码问题
    今天在mysql中使用CONCAT()函数进行结果拼接时出现了乱码问题,如下图所示:  后来发现是因为不同类型的字段进行拼接造成的应使用convert()函数进行类型转换,把非字......
  • ctfshow web99(in_array函数漏洞)
    <?phphighlight_file(__FILE__);$allow=array();//设置为数组for($i=36;$i<0x36d;$i++){array_push($allow,rand(1,$i));//向数组里面插入随机数}if(isset......
  • python中的range()函数
    range()函数:用于生成一个整数序列; range()的三种创建方式: 第一种:只有一个参数(小括号中只给了一个数)即range(stop)  例如:range(10)指的是默认从0开始,步长为1,不包括10......
  • 数仓性能调优:如何进行函数下推
    摘要:本文主要描述下函数在满足特征的前提下可以把函数属性定义为下推属性。本文分享自华为云社区《GaussDB(DWS)性能调优:函数下推》,作者:譡里个檔。DWS作为MPP架构的数仓......
  • js 简单封装一个像python中的range函数
    functionrange(start,end,step){letarr=[];for(leti=start;i<end;i++){if(i%step==0){arr.push(i)}}returnarr;}letarr=range(0,60,5);conso......
  • KafkaConsumer实现多线程消费的一种实现思路——不考虑消息的顺序性问题基础
    背景介绍一种Kafka多线程消费的实现思路以及方案,此方案不考虑消息消费的顺序性问题,假定消息之间没有依赖关系。这个项目是公司里面开发有个SDK的所谓”飞行窗口“特性产......