Supplier的使用场景有哪些?

一、延迟执行:在需要时才计算结果,常用于日志、缓存或条件判断

logIfEnabled(() -> heavyComputation());
 
void logIfEnabled(Supplier<String> msgSupplier) {
    if (isLogEnabled()) {
        System.out.println(msgSupplier.get());
    }
}

二、工厂模式的替代

传统写法:

public interface Factory<T> {
  T create();
}

完全可以用 Supplier<T> 取代:

Supplier<User> userFactory = User::new;

User u = userFactory.get();

三、Stream 的 generate() 方法:以 Supplier 作为数据来源

import java.util.stream.Stream;
 
Stream<Double> randoms = Stream.generate(Math::random);
randoms.limit(3).forEach(System.out::println);

四、Optional 的 orElseGet():用于提供默认值

Optional<String> name = Optional.empty();
String result = name.orElseGet(() -> "DefaultName"); // Supplier 用于提供默认值
System.out.println(result); // DefaultName

#函数式编程##java原理#
27届毕业生-Java面试专辑 文章被收录于专栏

帮您起飞,助您着陆心仪大厂。

全部评论

相关推荐

昨天 20:19
已编辑
门头沟学院 Java
太压力了,面了2个多小时,本菜比已经被拷打的瑟瑟发抖面完两个小时后通知过了1.算法题三道(1)leetcode124&nbsp;二叉树中最大路径和hard题&nbsp;因为不久前才刷过撕出来了,又来了一道(2)leetcode&nbsp;300&nbsp;最长递增子序列变种除了递增之外还加了一个权重因素,但是思路没变,dp就行(3)寻找词汇库里符合固定长度前缀的匹配单词应该是他们自己题库的题。给了一串单词列表,然后又给了一个单词,一个下标,根据这个下标的前缀去单词列表里面找到所有匹配的单词再返回思路是创建一个单词前缀树,然后根据树找,但是可能是构件树数有问题没撕出来2.全方位项目拷打基本没有问八股,全部都是项目企业场景题,哎哟我操,完全不会。我就纯八股战士,结果没想到一道八股都没问反正尽可能把企业场景往八股上引吧。。1.&nbsp;微服务多点部署其中一个宕机了怎么办2.&nbsp;要是mq占据大量CPU该怎么排查?MySQL占据大量CPU该怎么排查?3.&nbsp;假如说让你实现视频点赞功能,你打算怎么设计?讲讲思路(我知道多级缓存,但是碰巧没背……寄)4.&nbsp;Redis延迟双删是什么,分布式锁,哨兵模式5.&nbsp;MySQL到es同步的延迟该怎么优化6.&nbsp;Rabbit&nbsp;mq的队列是怎么实现的?(这个完全没整明白,可能是队列的底层结构?&nbsp;反正我硬扯的讲了一下rabbit&nbsp;mq的架构)还扯了很多,但是往后完全就慌了),记住的是这些
查看9道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务