目录

  • 一、supplier普通使用
    • 示例代码1:
    • 示例代码2:
  • 二、supplier在工厂模式中使用
  • 三、 Supplier 扩展类

Java 8 中的 Supplier 是一个函数接口,无参数,返回值类型为泛型 T。Supplier 的使用比较简单,使用场景也比较单一。

通俗的来说Supplier相当于一个放东西的容器,你可以在这个容器里放一些没有入参的代码,然后返回T类型,当调用get()方法的时候才会去执行容器里的代码得到返回值。

一、supplier普通使用

示例代码1:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.function.Supplier;public class MainServer {public static void main(String[] args) throws InterruptedException {Supplier<String> supplier = () -> {LocalDateTime localDateTime = LocalDateTime.now();DateTimeFormatter f1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");System.out.println("Supplier测试");return localDateTime.format(f1);};System.out.println("开始");System.out.println("当前时间:" + supplier.get());Thread.sleep(1000L);System.out.println("再次获取当前时间:" + supplier.get());}
}

输出:

开始
Supplier测试
当前时间:2022-04-20 09:39:24
Supplier测试
再次获取当前时间:2022-04-20 09:39:25

示例代码2:

import java.util.function.Supplier;public class MainServer {public static void main(String[] args)  {Supplier<Double> randomValue = () -> Math.random();System.out.println("获取随机数:" + randomValue.get());System.out.println("再次获取随机数:" + randomValue.get());}
}

输出:

获取随机数:0.702892997077614
再次获取随机数:0.3871863980392035

二、supplier在工厂模式中使用

import java.util.function.Supplier;public class MainServer {public static void main(String[] args)  {Dog dog1 = dogFactory(() -> new Dog("哈士奇"));Dog dog2 = dogFactory(() -> new Dog("牧羊犬"));System.out.println(dog1);System.out.println(dog2);}public static Dog dogFactory(Supplier<? extends Dog> supplier) {Dog dog = supplier.get();dog.setAge(1);return dog;}
}
public class Dog {private final String name;private  Integer age;public Dog(String name) {this.name = name;}public Dog(String name, Integer age) {this.name = name;this.age = age;}public String getName() {return name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "Dog{" + "name='" + name  + ", age=" + age + '}';}
}

输出:

Dog{name='哈士奇, age=1}
Dog{name='牧羊犬, age=1}

三、 Supplier 扩展类

在 Java 8 中,为了方便 Supplier 的使用,提供了指定类型的 Supplier,有 BooleanSupplier, DoubleSupplier, IntSupplier, LongSupplier

import java.util.Random;
import java.util.function.IntSupplier;public class MainServer {public static void main(String[] args)  {IntSupplier intSupplier = () -> new Random().nextInt(10);System.out.println(intSupplier.getAsInt());System.out.println(intSupplier.getAsInt());}
}

输出:

0
9

参考:
Supplier Interface in Java with Examples
Java 8 Supplier 函数接口
java1.8之supplier理解

java Supplier接口与示例相关推荐

  1. java supplier接口_Java函数式接口Supplier接口实例详解

    这篇文章主要介绍了Java函数式接口Supplier接口实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 JDK提供了大量常用的函数式接口以丰 ...

  2. java Consumer接口与示例

    目录 一.consumer使用 示例代码1: 示例代码2: 示例代码3: 示例代码4: 二.BiConsumer使用 示例代码一: 示例代码二: 三.其他和Consumer相关的接口 Java 8 中 ...

  3. java 接口函数_Java函数式接口Supplier接口实例详解

    这篇文章主要介绍了Java函数式接口Supplier接口实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 JDK提供了大量常用的函数式接口以丰 ...

  4. 【Java 8 新特性】Java Supplier示例

    Java Supplier是一个功能接口,代表结果的提供者. Supplier的功能方法是get(). 一个Supplier可以通过lambda表达式.方法引用或默认构造函数来实例化. Supplie ...

  5. java supplier t_在Java中如何使用lambda表达式中的Supplier T接口?

    Supplier接口是一个预定义的接口,表示结果的提供者.它是使用lambda表达式.方法引用或默认构造函数实例化的.Supplier接口的函数方法是get()方法.此接口属于java.util.fu ...

  6. java请求接口示例_Java 8:功能接口示例

    java请求接口示例 为了支持Java 8中的lambda表达式,他们引入了Functional Interfaces. 具有单一抽象方法的接口可以称为功能接口. Runnable,Comparato ...

  7. java请求接口示例_用示例解释Java接口

    java请求接口示例 介面 (Interfaces) Interface in Java is a bit like the Class, but with a significant differe ...

  8. java小程序详解_微信小程序登录Java后台接口(详解,附示例代码)

    首先看一下官方文档 地址:微信小程序官方文档API登录接口 我们先对官方给的时序图进行简单的分析 1.当小程序调用wx.login()时,会获得一个code(临时登录凭证),然后我们需要用wx.req ...

  9. 【java笔记】常用函数式接口(1):Supplier接口

    [java笔记]常用接口(2):Consumer接口_m0_52043808的博客-CSDN博客 [java笔记]常用函数式接口(3):Predicate接口_m0_52043808的博客-CSDN博 ...

最新文章

  1. 十 mybatis逆向工程
  2. vc使用opencv库 读取图像
  3. show status用法
  4. SAP Fiori Elements 公开课第二单元学习笔记:Fiori Elements 架构
  5. 浅述WinForm多线程编程与Control.Invoke的应用
  6. java错误1601解决方法,求助解决错误
  7. Debian11安装VLC Media Player视频播放器
  8. 2020-django目录
  9. 详解Angular开发中的登陆与身份验证
  10. java 从后往前截取_java 字符串截取的实例详解
  11. oracle的成本核算,ORACLE-EBS-最新成本管理手册
  12. 我们不曾向这个世界的庸俗低头
  13. C++搜索算法和曼哈顿距离之最少连通代价
  14. 第四篇:服务发现机制
  15. 2022-06-25 网工进阶(十一)IS-IS-三大表(邻居表、路由表、链路状态数据库表)、LSP、CSNP、PSNP、LSP的同步过程
  16. 27英寸显示器多大 长宽多少厘米
  17. 求职必备||程序员的优秀简历都是这样来的
  18. 鸿蒙系统 智能手表,wear os智能手表和鸿蒙系统智能手表对比
  19. Qter 遇见的大牛!
  20. 激战2电信服务器哪个最多,《激战2》电信一区服务器玩家实力排行榜

热门文章

  1. 高性能HTTP加速器Varnish-3.0.3搭建、配置及优化步骤
  2. vis.js 头部日期实现国际化
  3. 万年历java课程设计报告_java《万年历系统》课程设计报告附源码.doc
  4. Google 重叠实验框架:更多,更好,更快地实验(Google A/B实验论文)
  5. 考虑灾害响应的应急设施预定位选址
  6. 各浏览器版本对HTTPS连接的TLS1.1版本的支持情况
  7. HNUST 2204 买水果
  8. Android.mk介绍(一)
  9. pywt?PyWavelets?
  10. 阿铭Linux_域名学习笔记20190114.md