惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
小众软件
小众软件
博客园_首页
博客园 - 聂微东
V
V2EX
WordPress大学
WordPress大学
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
罗磊的独立博客
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 司徒正美
博客园 - 三生石上(FineUI控件)
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
S
SegmentFault 最新的问题
J
Java Code Geeks
Last Week in AI
Last Week in AI
The Cloudflare Blog
月光博客
月光博客
雷峰网
雷峰网
宝玉的分享
宝玉的分享
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Hugging Face - Blog
Hugging Face - Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
有赞技术团队
有赞技术团队
人人都是产品经理
人人都是产品经理
博客园 - Franky
腾讯CDC
Jina AI
Jina AI
博客园 - 叶小钗
大猫的无限游戏
大猫的无限游戏
阮一峰的网络日志
阮一峰的网络日志
量子位
爱范儿
爱范儿
美团技术团队
T
Tailwind CSS Blog
博客园 - 【当耐特】
D
Docker
IT之家
IT之家
V
Visual Studio Blog
P
Proofpoint News Feed
L
LangChain Blog
Engineering at Meta
Engineering at Meta
C
Check Point Blog
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
云风的 BLOG
云风的 BLOG
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Azure Blog
Microsoft Azure Blog
B
Blog RSS Feed
Recorded Future
Recorded Future

博客园 - 后厂村思维导图馆

一道小学一年级数学题,国产大模型全军覆没 Java日志框架的依赖设置备查(SLF4J, Log4j, Logback) 简单了解一下国产操作系统 我整理了近五年的开发者报告,看看国内外有什么差异? 简单了解一下国产GPU Docsify on VPS,搭建最简个人博客 简单了解一下国产CPU 向量数据库Pinecone,治疗ChatGPT幻觉的药方? 今天看到博客园的捐款求助,园龄17年6个月的我有些感慨 如何假装你懂机器学习? 如何假装你懂Meta Segment Anything? 如何假装你懂GPU? 如何假装你懂图片生成AI(Midjourney、文心一格)? 如何假装你懂ChatGPT? APP开发,微信第三方登录的介绍 程序员生存指南——镜像加速 Kerberos ticket lifetime及其它 HBase + Kerberos 配置示例(二) HBase + Kerberos 配置示例(一) Hadoop-2.6.0 + Zookeeper-3.4.6 + HBase-0.98.9-hadoop2环境搭建示例
Java Lambda基础——Function, Consumer, Predicate, Supplier, 及FunctionalInterface接口
后厂村思维导图馆 · 2018-12-13 · via 博客园 - 后厂村思维导图馆

这几个接口经常与Lambda结合使用,网上当然也有很多介绍,不过有些过于繁琐,有些又偏简单,秉着实用主义精神,今天这里折中一下,把介绍的内容分为两部分,第一部分相当于TLDR,总结几个“口诀”,便于大家记忆,对于更想看用法示例的同学们,第二部分者提供了所有这些接口的示例。希望对大家有所帮助。

口诀

    如无参数,请使用Supplier(Use Supplier if it takes nothing)

    如无返回,请使用Consumer(Use Consumer if it returns nothing)

    如两者都无,请使用Runnable(Use Runnable if it does neither)

    如两者都有,请使用Function(Use Function if it does both)

    如返回布尔值,请使用Predicate(Use Predicate if it returns a boolean)

    如以上皆不可以,请使用自定义@FunctionalInteface(Use @FunctionalInteface if none of above works)

示例

  1. Supplier
private static <T> testSupplier(Supplier<T> supplier) {
    return supplier.get();
}
...
Integer s = testSupplier(() -> 7 + 3); // 不接受任何参数,但会返回数据
System.out.println(s); // 输出10
  1. Consumer
private static <T> void testConsumer(Consumer<T> consumer, T data) {
    consumer.accept(data);
}
...
testConsumer(System.out::println, "dummy"); // 直接调用println,输出"dummy",无任何返回
  1. Runnable
private static void testRunnable(Runnable runnable) {
    runnable.run();
}
...
testRunnable(() -> System.out.println("dummy")); // 既无输入,也无输出
  1. Function
private static <T, R> testFunction(Function<T, R> function, T data) {
    return function.apply(data);
}
...
Integer f = testFunction((d) -> d * 23); // 既有输入,也有输出(将给定值X2)
System.out.println(f); // 输出6
  1. Predicate
private static <T> boolean testPredicate(Predicate<T> predicate, T data) {
    return predicate.test(data);
}
...
boolean p = testPredicate((d) -> d > 0100); // 接受输入,输出布尔值(判断给定值是否为正数)
System.out.println(p); // 输出true
  1. @FunctionalInterface
@FunctionalInterface
public interface CalculationFuncInterface<TUR{
    public R apply(T l, U i);
}
...
private static <T, U, R> testFunctionalInterface(CalculationFuncInterface<T, U, R> cal, T data1, U data2) {
    return cal.apply(data1, data2);
}
...
Integer fi = testFunctionalInterface((a, b) -> a * b, 67); // 接受两个输入参数,并返回其乘积
System.out.println(fi); // 输出42

今天的介绍就先到这,感谢大家,Cheers!


公众号“后厂村思维导图馆”,欢迎关注。免费送出O'Reilly《Spark快速大数据分析》纸质书(亦有一批PDF分享)!