Java Consumer的使用

Java  2022年6月24日 am8:08发布2年前 (2022)更新 城堡大人
91 0 0

前言

今天有空整理一下Consumer<T> 接口的使用,一般用于回调中。

这里简单记录一下。

正文

Consumer<T>接口是java 1.8才有的,定义如下:

//java.util.function.Consumer

@FunctionalInterface
public interface Consumer<T> {

    void accept(T t);

    default Consumer<T> andThen(Consumer<? super T> after) {
        Objects.requireNonNull(after);
        return (T t) -> { accept(t); after.accept(t); };
    }
}

Consumer是消费的意思。

Consumer<T>可以消费一个T类型(泛型)的数据,有accept和andThen两个方法。

accept 的使用

void accept(T t)

意为消费一个指定泛型的数据

demo片段

定义consumerLog方法

private void consumerLog(String name, Consumer<String> consumer ){
    consumer.accept(name);
}

使用consumerLog方法

consumerLog("Hello", new Consumer<String>() {
    @Override
    public void accept(String s) {
        Log.d(TAG, "accept 11 s : "+ s);
    }
});

andThen 的使用

default Consumer<T> andThen(Consumer<? super T> after) {
    Objects.requireNonNull(after);
    return (T t) -> { accept(t); after.accept(t); };
}

如果一个方法的参数和返回值全都是Consumer类型,那么就可以实现效果:

消费数据的时候,首先做一个操作,然后再做一个操作,实现组合,而这个方法就是Consumer接口中的default方法andThen

demo片段

定义consumerLog2方法

private void consumerLog2(String name, Consumer<String> consumer1,Consumer<String> consumer2 ){
    consumer2.andThen(consumer1).accept(name);
}

使用consumerLog2

consumerLog2("World", new Consumer<String>() {
    @Override
    public void accept(String s) {
        Log.d(TAG, "accept 22 s : "+ s);
    }
}, new Consumer<String>() {
    @Override
    public void accept(String s) {
        Log.d(TAG, "accept 33 s : "+ s);
    }
});

参考文章

  1. 【java笔记】常用接口(2):Consumer接口
  2. Consumer接口
  3. Consumer接口

 历史上的今天

  1. 2024: 李娟:属于我的马(0条评论)
  2. 2023: Android View相关摘抄(0条评论)
  3. 2021: [ijkplayer专题]编译ijkplayer时出现Failed to create toolchain(0条评论)
  4. 2021: 余秀华:一潭水(0条评论)
  5. 2020: [摘]BAT脚本如何自动执行 adb shell 以后的命令(0条评论)
版权声明 1、 本站名称: 笔友城堡
2、 本站网址: https://www.biumall.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权,请留言

暂无评论

暂无评论...

随机推荐

Android Studio添加第三方库libs和so

前言这个经常用,但还是忘记了,因此参考网上文章整理于此。本文摘抄内容涉及: 添加so库,添加第三方jar,添加Library库文件等。好记性不如烂笔头正文添加so库方法一:在项目中的src/main里新建jniLibs文件夹把.so复制进去,刷新一下即可方法二:在app/...

GridView快速滚动条修改

前言之前在《Android 修改ListView快速滚动条的bar -笔友城堡 - 阅读是一种生活方式 ()》也介绍过,后面有个新的需求:当没有一页时需要影藏。其实也简单,代码中对个数的判断进行影藏和显示。PS:内容跟之前差不多,但这里精简写。正文GridView和ListV...

王小波:用一生来学习艺术

我念过文科,也念过理科。在课堂上听老师提到艺术这个词,还是理科的老师次数更多:化学老师说,做实验有实验艺术;计算机老师说,编程序有编程艺术。老师们说,怎么做对是科学,怎么做好则是艺术;前者有判断真伪的法则,后者则没有;艺术的真谛就是要叫人感到好,甚至是完美无缺;传授科学知识就是告诉你这些法则,而艺术...

C语言之指针

前言记录一下C语言中的指针相关知识,算是回顾之前所学吧。正文指针在C语言中,内存单元的地址称为指针。专门用来存放地址的变量,称为指针变量。存储类型 数据类型 * 指针变量名;int a = 10;# 第一种int *p = &a;# 第二种int *p; //...

WordPress评论提交速度很慢的原因和解决办法

最近使用Nana主题时,发现提交比较卡,因此百度了一下,发现大家也是一样的。由于大神也遇到,因此他们都解决了此问题,因此我也摘抄于此,以便查阅。一般分为两个问题(大多数吧),一是WordPress设置问题,二是服务器问题。1、WordPress设置问题这个比较简单,你只需要在 WordPre...

Android悬浮窗实现 使用WindowManager

WindowManager介绍通过Context.getSystemService(Context.WINDOW_SERVICE)可以获得 WindowManager对象。使用WindowManager可以在其他应用最上层,甚至手机桌面最上层显示窗口。调用的是WindowManager继承自...