1、Supplier简介

Supplier是Java8配合Lambda表达式和函数式接口编程组合使用的一个接口,对外表现为 ::

接口Supplier<T> 最适合表示工厂。带有Supplier<T> 的方法,通常应该限制输入工厂的类型参数使用有限制的通配符类型,以便客户端可以传入工厂,来创建制定类型的任意子类。

简而言之,Supplier<T>就是来创建对象的。

案例:


import com.xian.dto.Person;
import org.junit.Test;import java.util.Arrays;
import java.util.List;
import java.util.function.Supplier;public class SupplierTest {@Testpublic void test(){Supplier<Person> supplier = Person::new;int age = supplier.get().getAge();System.out.println(age);}public int getVal(Supplier<Integer> supplier){return supplier.get();}@Testpublic void testSupplier(){List<Integer> valList = Arrays.asList(1, 245, 6, 7, 8, 65, 432, 345);int maxVal = getVal(()->{int val = Integer.MIN_VALUE;for (Integer v : valList){if (v > val){val = v;}}return val;});System.out.println("最大值:"+maxVal);int minVal = getVal(()->{int val = Integer.MAX_VALUE;for (Integer v : valList){if (v < val){val = v;}}return val;});System.out.println("最小值:"+minVal);}
}

2、源码分析

package java.util.function;/*** Represents a supplier of results.** <p>There is no requirement that a new or distinct result be returned each* time the supplier is invoked.** <p>This is a <a href="package-summary.html">functional interface</a>* whose functional method is {@link #get()}.** @param <T> the type of results supplied by this supplier** @since 1.8*/
@FunctionalInterface
public interface Supplier<T> {/*** Gets a result.** @return a result*/T get();
}

Supplier<T> 接口源码中只有个get()方法

每次调用get()方法,就会调用构造方法,获取对象实例。

@FunctionalInterface:函数式接口声明,这个注解加不加都可,但是加上可以让编译器更好的检查,如果编写不是函数式接口,加上@FunctionInterface编译会报错。

3、Lambda表达式和Supplier组合


import lombok.AllArgsConstructor;
import lombok.Data;@Data
@AllArgsConstructor
public class Person {private String name = "瞻园";private int age = 1;public Person(){System.out.println("无参构造函数!!");}
}/*** 测试*/
public class SupplierTest {@Testpublic void test1(){List<Person> list = new ArrayList<>();list.add(new Person("zhangsan",2));list.add(new Person("lisi",3));list.add(new Person("wangwu",4));Map<String, Integer> map = list.stream().collect(Collectors.toMap(Person::getName, Person::getAge));System.out.println(map);// {lisi=3, zhangsan=2, wangwu=4}}
}

Java8新特性:(五)Supplier简介相关推荐

  1. 【java8新特性】——默认方法(五)

    一.简介 默认方法是指接口的默认方法,它是java8的新特性之一.顾名思义,默认方法就是接口提供一个默认实现,且不强制实现类去覆写的方法.默认方法用default关键字来修饰. 默认方法可以解决的痛点 ...

  2. 【java8新特性】——方法引用(四)

    一.简介 方法引用是java8的新特性之一, 可以直接引用已有Java类或对象的方法或构造器.方法引用与lambda表达式结合使用,可以进一步简化代码. 来看一段简单代码: public static ...

  3. 【java8新特性】——Optional详解(三)

    一.简介 Optional类是Java8为了解决null值判断问题,借鉴google guava类库的Optional类而引入的一个同名Optional类,使用Optional类可以避免显式的null ...

  4. Java8新特性(一)-Lambda表达式

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/hhq12/article/detail ...

  5. Java8 新特性之流式数据处理(转)

    转自:https://www.cnblogs.com/shenlanzhizun/p/6027042.html 一. 流式处理简介 在我接触到java8流式处理的时候,我的第一感觉是流式处理让集合操作 ...

  6. 【java8新特性】——Stream API详解(二)

    一.简介 java8新添加了一个特性:流Stream.Stream让开发者能够以一种声明的方式处理数据源(集合.数组等),它专注于对数据源进行各种高效的聚合操作(aggregate operation ...

  7. 【java8新特性】——lambda表达式与函数式接口详解(一)

    一.简介 java8于2014年发布,相比于java7,java8新增了非常多的特性,如lambda表达式.函数式接口.方法引用.默认方法.新工具(编译工具).Stream API.Date Time ...

  8. Java8新特性之空指针异常的克星Optional类

    Java8新特性系列我们已经介绍了Stream.Lambda表达式.DateTime日期时间处理,最后以"NullPointerException" 的克星Optional类的讲解 ...

  9. java8新特性stream流

    参考自深蓝至尊的Java8 新特性之流式数据处理 一. 流式处理简介 在我接触到java8流式处理的时候,我的第一感觉是流式处理让集合操作变得简洁了许多,通常我们需要多行代码才能完成的操作,借助于流式 ...

  10. java8新特性总结——lambda表达式

    最近看尚硅谷java8新特性视屏,总结一下学习知识. Lambda表达式:是一个匿名函数,我们可以把Lambda理解为一段可以传递的代码(将代码像数据一样传递),可以写出更简洁更灵活的代码.作为一种更 ...

最新文章

  1. netbeans 添加gif图片_怎么制作动态图片?手机如何制作清晰gif动图?
  2. 【 MATLAB 】Matlab 帮助文档需要登录问题如何解决?
  3. python input与返回值-Python 详解基本语法_函数_返回值
  4. Mybatis的下载并搭建核心架构
  5. 浅谈工业机器人的运动停止
  6. vsUnit单元测试
  7. 第三十三期:连接池中非常关键的两个参数,到底是干啥用的?
  8. html5 制作会转的风扇,HTML5学习第5天[乱撞的球]可以听到风扇声的哟
  9. 8日直播预告丨Oracle 19c X86下移经验分享
  10. django ForeignKey on_delete属性相关参数的使用
  11. Docker、Mesos和Marathon剖析以及入门实战
  12. CPU负载均衡之cpufreq使用
  13. SQL 的 REGEXP
  14. 抖音矩阵系统,抖音矩阵系统源码,抖音SEO源码。
  15. 《互联网信息资源检索与利用》读书笔记
  16. python:实现哥德巴赫猜想
  17. 信息学奥赛(NOIP/CSP-J/S)学习全目录
  18. 直播间人气互动软件教程
  19. P3392 涂国旗——暴力枚举
  20. 安卓开机linux图标,在启动栏制作android studio启动图标

热门文章

  1. 无源蜂鸣器的歌曲演奏
  2. T-Mobile G1手机入手作业
  3. linux元年时间搓,发布基于ANSI-C的RTC_Time库,利用UNIX时间戳格式,无中断实现万年历...
  4. 没有权限访问html,本地连接ipv4无网络访问权限解决办法
  5. 2010年用最少的钱玩转张家界
  6. 第四届CECC中国计算机教育大会召开,飞桨持续加码产教融合教育新生态
  7. 【SEUSE】操作系统实验:消费者-生产者问题
  8. 单片机、DSP、ARM、FPGA,它们都能干什么
  9. Excel表格区域隐藏后怎么恢复
  10. QQ显IP绝迹江湖了吗?