版权声明:本文为博主原创文章,无需授权即可转载,甚至无需保留以上版权声明,转载时请务必注明作者。
https://blog.csdn.net/weixin_43453386/article/details/88569380

java——》Supplie

  • 一、描述
  • 二、源码
  • 三、示例
  • 四、作用
  • 五、我的使用场景
    • 1、简单描述一下我的需求
    • 2、我的最终实现

一、描述

Supplier< T>接口没有入参,返回一个T类型的对象,类似工厂方法

二、源码

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();
}

三、示例

public class T {public static void main(String[] args) {//创建Supplier容器,声明为T类型,此时并不会调用对象的构造方法,即不会创建对象Supplier<T> sup= T::new;//调用get()方法,此时会调用对象的构造方法,即获得到真正对象T t1 = sup.get();//每次get都会调用构造方法,即获取的对象不同T t2 = sup.get();System.out.println(t1);System.out.println(t2);Supplier<Integer> supplier= () -> 100;System.out.println(supplier.get());}
}
Connected to the target VM, address: '127.0.0.1:49711', transport: 'socket'
Disconnected from the target VM, address: '127.0.0.1:49711', transport: 'socket'
0
0
com.ejudata.platform.test.T@50675690
com.ejudata.platform.test.T@31b7dea0
100Process finished with exit code 0

四、作用

在程序里,我们传递的是Supplier对象,直到调用get方法时,运算才会执行。这就是所谓的惰性求值。
所以,我们可以把耗资源运算放到get方法里。

五、我的使用场景

1、简单描述一下我的需求

excel的每一行,都需要调用5个不同的接口(有的接口快,有的接口慢),并把每一行的结果回写到excel中对应的位置

注意:

  • excel最少1w行
  • 行与行之前可以并行执行,但执行的结果要与行对应上
  • 每行调用的5个接口的耗时是不一样的,不能因为其中一个接口就阻塞其它接口的执行

2、我的最终实现


/*代码片段一:把每一行要执行的5个方法放入list*/
private List searchOnLineWriteRow(int i, String text, String city) {List list = new ArrayList<>();list.add((Supplier) () -> mapSearch(i,city, text, Constans.GaoDe));list.add((Supplier) () -> mapSearch(i,city, text, Constans.BaiDu));list.add((Supplier) () -> notMapSearch(i,city, text, Constans.LianJia));list.add((Supplier) () -> notMapSearch(i,city, text, Constans.AnJuKe));list.add((Supplier) () -> notMapSearch(i,city, text, Constans.FangTx));return list;}/*代码片段二:把所有行的所有方法放入一个list*/
List<Supplier<Map<String, CommunityInfo>>> suppliers = new ArrayList<>();for (int i = 0; i < needHandleList.size(); i++) {String text = needHandleList.get(i).get("text");String city = needHandleList.get(i).get("city");if (StringUtils.isNotBlank(text) && StringUtils.isNotBlank(city)) {suppliers.addAll(searchOnLineWriteRow(i, text, city));}}/*代码片段三:把最终要执行的方法开多线程去并行执行*/
List<Map<String,CommunityInfo>> communityInfoListTemp = new ThreadsUtils().executeFutures(suppliers, e->{return e.get();},true,20);

java——》Supplie相关推荐

  1. java简介 ppt 精_《JAVA》5选择结构精篇课件.ppt

    <JAVA>5选择结构精篇课件 选 择 结 构 if 语句 if – else语句 Switch语句 块作用域语句又被称为复合语句,其格式为:用一对花括号将若干条语句括起来,目的是从语法上 ...

  2. 《Head First Java》的思考总结:第三篇

    前言: 今天要分享的是关于 <Head First Java>这本书的读后感,这本书有点小厚差不多有七百页左右,所以我花了几乎整个国庆的时间去阅读,学习.读完之后发现,受益颇多.正如书名所 ...

  3. 在java中开发图形用户_2016年计算机二级考试《JAVA》习题:编写图形用户界面

    第9章 编写图形用户界面 1[单选题]哪个布局管理器使用的是组件的尺寸? ( ) A.FlowLayout B.BorderLayoutC.GridLayout D.CardLayout 参考答案:A ...

  4. 《图书管理系统——java》

    /* (盯着先拔头筹程序) * 该计划的版权声明和版本号 * Copyright (c) 2011, 烟台大学计算机学院学生的学校 * All rights reserved. * 文件名:    & ...

  5. 《Effective Java》读书笔记 Item 1:考虑静态工厂方法,而不是构造器

    众所周知,要想能获取一个类的实例,该类得要提供一个public的构造器.但是<Effective Java>书中说还有一个方法,那就是提供静态工厂方法(static factory met ...

  6. 《Effective Java》 第二讲:对于所有对象都通用的方法

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 上接<Effective Java> 第一讲:创建和销毁对象 八.覆盖 equals 时 ...

  7. java二级考试备考_2017计算机二级考试《JAVA》备考测试题「带答案」

    2017计算机二级考试<JAVA>备考测试题「带答案」 为确保同学们将所涉及的考点全面复习到位,让大家充满信心的步入考场,以下是百分网小编搜索整理的一份计算机二级考试<JAVA> ...

  8. 计算机二级java试题_计算机二级考试《Java》试题及答案

    计算机二级考试<Java>试题及答案 选择题(每小题2分,共50分) 下列各题A.B.C.D. 四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应的位置上,答在试卷上不得分. ...

  9. 《Thinking in java》 读了个开头

    一年前初学java 时,老师让模仿一个最基本的聊天程序,带GUI的,然后我就把所有的代码都放在main 方法里了,当时读别人的程序时还很纳闷,为毛搞这么多类,这么多方法,最后监听的时候就傻眼了,搞不下 ...

最新文章

  1. python提取excel数据-使用Python从Excel获取运营数据
  2. python进阶(小白也能看懂)——装饰器浅谈(一)
  3. 豆瓣读书评分 8.7 以上! 这 40 本 Python 畅销书包邮送
  4. 【MySQL经典案例分析】关于数据行溢出由浅至深的探讨
  5. 强势解析 eBay BASE 模式、去哪儿及蘑菇街分布式架构
  6. 【Linux入门学习之】ubuntu10.04 ruijie配置上网(用mentohust)
  7. mysql innodb和myisam区别_MySQL?存储引擎简介
  8. Python之 continue继续循环
  9. 如何测试W5300的内部TX/RX存储器?
  10. Java集合sort()
  11. Testdisk 修复磁盘分区表丢失
  12. Mac安装双系统后无法切回mac系统
  13. Android开发必备知识
  14. FinClip如何将H5工程转为小程序
  15. QT学习记录 --- 获取文件哈希值
  16. 三门外语 精通oracle_《精通Oracle SQL(第2版)》PDF 下载
  17. 动态代理的原理及其应用
  18. 内存屏障(Memory Barrier)(二)什么是读屏障?
  19. 什么是智能插座,智能插座有什么用?
  20. 天行健,君子必自强不息吗?

热门文章

  1. 一种设计软件界面的万能HTML标签
  2. 台式计算机排行榜2018,CPU天梯图性能排行榜 台式电脑CPU天梯图2018年4月最新版...
  3. underflow, overflow, approximation and rounding error
  4. 2008系统更改计算机名,用Windows server 2008 R2更改计算机名的方法
  5. 奥鹏计算机应用基础考前,华东2020年秋季学期《计算机应用基础》在线考试
  6. 三星android平板,三星也不忘Android平板,或推带虹膜识别的Galaxy Tab S4
  7. 最小生成树————普利姆和克鲁斯卡尔
  8. 移动云,中国移动算力网络棋局中的关键一子
  9. Android之Canvas画笔和画布
  10. Windows10设置开启自启动任务