Consumer<T>接口的使用

概要

吴含

方法方法的说明
void accept(T t)对给定的参数执行此操作。 参数 t - 输入参数
default Consumer andThen(Consumer<? super T> after)返回一个组合的Consumer , Consumer执行该操作,后跟after操作。 如果执行任一操作会抛出异常,它将被转发到组合操作的调用者。 如果执行此操作抛出一个异常, after操作将被执行。 参数 after - 此操作后执行的操作 结果 一个组合的 Consumer按顺序执行该操作,后跟 after操作

代码操作

不是组合情况下(一个接口处理一个事务)

package Demo;

import java.util.function.Consumer;

/*
  Consumer<T>:包含两个方法
  void accept(T t):对给定参数执行此操作
  default Consumer<T> andThen(Consumer after):返回一个组合的Consumer,依次执行次操作,然后执行after操作
 */
public class ConsumerDemo {
    public static void main(String[] args) {

        //用lambda表达式写
        operatorString("ikun",(s)-> System.out.println(s));



    }
    //定义一个方法(operatorString),消费一个字符串数据
    private static void operatorString(String name, Consumer<String>c){
        c.accept(name);//c执行
    }
}


是组合情况下(多个接口处理一个事务)

ConsumerDemo类

package Demo;

import java.util.function.Consumer;

/*
  Consumer<T>:包含两个方法
  void accept(T t):对给定参数执行此操作
  default Consumer<T> andThen(Consumer after):返回一个组合的Consumer,依次执行次操作,然后执行after操作
 */
public class ConsumerDemo {
    public static void main(String[] args) {
        /*
        //用
        operatorString("ikun", new Consumer<String>() {
            @Override
            public void accept(String s) {
                String s1 = s;
                System.out.println(s1);
            }
        },new Consumer<String>() {
            @Override
            public void accept(String s) {
                StringBuilder sb = new StringBuilder(s);
                sb.reverse();
                String s2 = sb.toString();
                System.out.println(s2);
            }
        });
        
         */

        //用lambda表达式写
        operatorString("ikun",(s)-> System.out.println(s),(s1)-> System.out.println(new StringBuilder(s1).reverse().toString()));



    }
    //定义一个方法(operatorString),消费一个字符串数据
    private static void operatorString(String name, Consumer<String>c1,Consumer<String> c2){
        c1.andThen(c2).accept(name);//c1先执行,完了c2再执行
    }
}

习题练习

练习

  • String[] strArray={“iKun,30”,“iKun2,27”,“iKun3,40”};
  • 字符串数组中有多条信息,请按照格式:“姓名,XX年龄:XX的格式信息打印出来”
  • 要求:
    把打印姓名的动作作为第一个Consumer接口的Lambda实例
    把打印年龄的动作作为第二个Consumer接口的Lambda实例
    将两个Consumer接口按照顺序组合到一起使用
package Demo;

import java.util.function.Consumer;

/*
  练习
  String[] strArray={"iKun,30","iKun2,27","iKun3,40"};
  字符串数组中有多条信息,请按照格式:"姓名,XX年龄:XX的格式信息打印出来"
  要求:
      把打印姓名的动作作为第一个Consumer接口的Lambda实例
      把打印年龄的动作作为第二个Consumer接口的Lambda实例
      将两个Consumer接口按照顺序组合到一起使用
 */
public class ConsumerDemo {
    public static void main(String[] args) {
        String[] strArray={"iKun,30","iKun2,27","iKun3,40"};
/*
        //用匿名类
        printInfo(strArray, new Consumer<String>() {
            @Override
            public void accept(String str1) {
                String[] s1 = str1.split(",");
                System.out.println("姓名:"+s1[0]);
            }
        },new Consumer<String>() {
            @Override
            public void accept(String str2) {
                String[] s2 = str2.split(",");
                System.out.println("年龄:"+s2[1]);
            }
        });
 */
        //用lambda表达式
        printInfo(strArray,str1-> System.out.print("姓名:"+str1.split(",")[0]),str2-> System.out.print("年龄:"+str2.split(",")[1]));
        
    }

    //定义一个方法为printInfo
    private static void printInfo(String[] strArray,Consumer<String> c1,Consumer<String> c2){
        for(String str:strArray){
            c1.andThen(c2).accept(str);
        }

    }

}

输出的内容为:
姓名:iKun年龄:30姓名:iKun2年龄:27姓名:iKun3年龄:40

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发热的嘤嘤怪(2003计科胜胜同学)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值