Java Consumer的使用

Java  2022年6月24日 am8:08发布2年前 (2022)更新 91es.com站长
71 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、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com
3、 本站内容: 部分来源于网络,仅供学习和参考,若侵权请留言
3、 本站申明: 个人流水账日记,内容并不保证有效

暂无评论

暂无评论...

随机推荐

换肤库BinSkin1的使用

前言之前介上线了Android的动态换肤库(BiuSkin1PA和BiuSkin1PNA),但没有写demo,因此这次抽空更新一下如何使用这些换肤库。也可以直接看对应动态换肤库的介绍:《动态换肤库:BiuSkin1PA》和《动态换肤库:BiuSkin1PNA》正文动态换肤就是常说的外置换肤...

Android 显示覆盖全屏的Dialog

前言有时候需要一个dialog霸占全屏,而且不让状态栏出现。PS: 我这里说的是全屏状态,然后显示dialog霸占全屏,也就是最顶层都是dialog的界面。比如我这屏幕1920 * 720,全屏(没有导航栏和状态栏)需要实现的dialog显示的区域也是1920 * 720。记录于此,方...

隐藏Settings中的Preference笔记

在Android项目开发中,客户要求精简Settings,也就是删除部分不需要或者无用的功能,因此需要影藏Preference等,下面是摘抄网友并自己加工整理的。隐藏 Preference 有两种方法:一、先在xml布局里面删,然后在java里面删掉调用的相关部分,但如果很多地方都有调...

[摘]Android稳定性(二)bootup fail

前言之前我也有整理相关的,但没有摘抄的这篇文章那么详细,因此这里摘抄于此,方便自己查阅。本文摘抄,感谢作者分析。好记性不如烂笔头正文下面就简单介绍一下Android系统启动流程。BootLoader启动开机供电,硬件电路会产生一个确定的复位时序用于硬件启动顺序,直至最后CPU启动;C...

adb多个设备控制

前言对于一台电脑存在多个设备的,之前记录了,但不知道放哪了。因此,重新简单记录一下吧。主要是记忆力不行,放这里方便自己查找。正文# 查看设备adb devicesList of devices attachedUIS787021003B011234     deviceemulat...

隐藏Settings菜单的几种方法

此文章是摘抄的,作为影藏系统设置中的部分选项还是有效的。本文修改基于mtk6.0系统隐藏一个一级菜单源码位置 packages/apps/Settings/src/com/android/settings/SettingsActivity.java; private int[] S...