Java 8 Supplier函数式接口介绍及实战案例

介绍直接看这篇文章比较详细:【Java 基础篇】Java Supplier 接口详解

Supplier 是 Java 8 引入的一个函数式接口,它属于 java.util.function 包。Supplier 接口表示一个不接受任何参数但返回某种类型结果值的函数。它定义了一个 get() 方法,该方法没有参数,但返回一个泛型 T 类型的值。

Supplier 接口常用于以下场景:

延迟计算或生成值: 在某些情况下,你可能希望只有在真正需要结果时才进行计算或生成值。使用 Supplier,你可以将计算或生成值的逻辑封装在 get() 方法中,并在需要时调用它。
提供默认值: 当某个方法需要返回一个值时,但此时没有合适的值可返回时,可以使用 Supplier 来提供一个默认值。
与 Stream API 结合使用: 在 Java 8 的 Stream API 中,Supplier 可以与 Stream.generate() 方法一起使用,以生成一个无限流,其中每个元素都是通过调用 Supplier 的 get() 方法获得的。


实战中的使用:

例如有方法如下

    public long nextId(){
        if (enabled.get()) {
            return idGen.nextId();
        }
        throw new ForbidOperationException(ErrorCode.FORBID_GENERATE_SEQRULE_EXCEPTION);
    }

    public String nextCode(Map<String, String> params){
        return CodeGenerator.getInstance().create(ruleId, nextId(), callBackTime(), params);
    }

nextCode()方法中,传入的参数有nextId()方法返回的结果。但实际场景中,我希望nextId()方法能在CodeGenerator.getInstance().create执行中途再执行而不是传入参数前执行(有数据校验问题),就可以用到Supplier函数式接口其中针对long类型返回值的LongSupplier接口,以实现其提供的延迟计算或生成值功能

改造后的代码:

    public String nextCode(Map<String, String> params) {
        LongSupplier func = new LongSupplier() {
            @Override
            public long getAsLong() {
                return nextId();
            }
        };
        return CodeGenerator.getInstance().create(ruleId, func, callBackTime(), params);
    }

用lambda表达式进一步改造:

    public String nextCode(Map<String, String> params) {
        LongSupplier func = this::nextId;
        return CodeGenerator.getInstance().create(ruleId, func, callBackTime(), params);
    }

之后在CodeGenerator.getInstance().create方法里就可以在合适的地方使用func.getAsLong()进行调用了

在这里插入图片描述


最近新项目提测阶段已经连续加班两个多月了,天天弄到23点,顶不住呀,好久没更新文章了,过段时间忙完了应该就会恢复更新了。

THX bros

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值