(替代

my original answer)

但是,如果转型是缓慢的,或者某些输入可能会失败但是对其他输入成功会怎么样?在这种情况下,我们希望单独转换每个输出.另外,我们希望确保转换只发生一次.我们的集合转换方法不能保证这一点.因此,在您的示例代码中,输出上的每次迭代都会向执行程序提交新任务,即使先前提交的任务可能已经完成.因此,只有在转换是轻量级的时候,我们才推荐Iterables.transform和朋友. (通常,如果你正在做重量级的事情,你的转换函数将抛出一个已检查的异常,函数不允许.考虑这个提示:)当然,你的例子不会触发提示.)

这在代码中意味着什么?基本上,我们将颠倒我在其他答案中给出的操作顺序.我们将转换为Future< Iterable< A>>到Iterable< Future< A>>第一.然后我们将为每个A提交一个单独的任务,将其转换为B.对于后一步,我们将提供Executor so that the transformation doesn’t block some innocent thread.(我们现在只需要Futures.transform,所以我静态导入它. )

List> individuals = newArrayList();

for (int i = 0; i < knownSize; i++) {

final int index = i;

individuals.add(transform(input,new Function,A>() {

@Override

public A apply(List values) {

return values.get(index);

}

}));

}

List> result = newArrayList();

for (ListenableFuture original : individuals) {

result.add(transform(original,function,executor));

}

return result;

无论如何,那就是这个想法.但我的实施是愚蠢的.我们可以轻松地同时执行这两个步骤:

List> result = newArrayList();

for (int i = 0; i < knownSize; i++) {

final int index = i;

result.add(transform(input,B>() {

@Override

public B apply(List values) {

return function.apply(values.get(index));

}

},executor));

}

return result;

因为这使得n Futures.transform调用而不是1并且因为它使用单独的Executor,所以如果转换是重量级的,那么它比我的其他解决方案更好,如果它是轻量级的则更糟.另一个警告仍然是:只有当你知道你将拥有多少输出时,这才有效.

finditerable 转list_java – 通过拆分和运行将ListenableFuture转换为Iterable相关推荐

  1. java拆分list_Java平均拆分list

    为了使用并发计算,有时候需要对list做拆分.而java中默认的subList方法满足不了这种需求,那就自己动手写一个吧. package demo18; import java.util.Array ...

  2. linux文件名小写变大写命令,通过Ubuntu命令行将文件名转换为小写

    在使用Linux时,您可能会遇到一些仅使用小写文件名的实用程序和应用程序.我们通常不以这种格式保存文件,因此可能需要寻找一种解决方法,将文件夹中的所有文件名递归转换为小写.在本文中,我们将向您展示两种 ...

  3. 在阿里云的CentOS 6.5 上面安装 timidity++ 和 ffmpeg(含libmp3lame) 实现命令行将midi转换为mp3...

    首先使用yum安装需要的组件 yum install -y automake autoconf libtool gcc gcc-c++ yasm yasm-devel 然后从sourceforge下载 ...

  4. Flashback Oracle文档阅读

    和Flashback相关的文档大多位于备份和恢复用户指南 和Oracle 数据库开发指南中. 基本概念 请参看备份和恢复用户指南的1.4 About Oracle Flashback Technolo ...

  5. 聊聊 Kafka: Kafka 的基础架构

    一.我与快递小哥的故事 一个很正常的一个工作日,老周正在忙着啪啪啪的敲代码,办公司好像安静的只剩敲代码的声音.突然,我的电话铃声响起了,顿时打破了这种安静. 我:喂,哪位? 快递小哥:我是顺丰快递的, ...

  6. Kafka官方文档翻译——简介

    简介 Kafka擅长于做什么? 它被用于两大类应用: 在应用间构建实时的数据流通道 构建传输或处理数据流的实时流式应用 几个概念: Kafka以集群模式运行在1或多台服务器上 Kafka以topics ...

  7. 【KVM系列01】KVM简介及安装

    第一章 KVM简介及安装 1. KVM 介绍 1.0 虚拟化简史 1.1 KVM 架构 2. KVM 的功能列表 3. KVM 工具集合 4. RedHat Linux KVM 安装 4.1 在安装  ...

  8. openstack项目【day23】:KVM介绍

    阅读目录 什么是kvm 为何要用kvm kvm的功能 常见虚拟化模式 KVM架构 KVM工具集合 一 什么是kvm KVM 全称 Kernel-Based Virtual Machine.也就是说 K ...

  9. 你需要了解操作系统发展历程

    本文我们大概回顾计算机操作系统发展历程,这里不会记录关于操作系统的完整历史记录,只是记录那些里程碑事件,看看各位接触计算机时,操作系统发展正处于哪个年代 起初 没有操作系统,没有编程语言或编译器,甚至 ...

最新文章

  1. hibernate Expression详解
  2. FACTORY设计模式【让吃货也能理解的程序】
  3. ML之SR:Softmax回归(Softmax Regression)的简介、使用方法、案例应用之详细攻略
  4. 六、继续学习Java的位运算符,发现真的简单
  5. Silverlight实例教程 - Out of Browser的Debug和Notifications窗口
  6. 计算机组成原理的实验课心得,计算机组成原理移位控制实验心得.docx
  7. 502无法解析服务器标头_编写下载服务器。 第二部分:标头:Last-Modified,ETag和If-None-Match...
  8. Python---利用蒙特.卡罗方法计算圆周率近似值
  9. 跳一跳python开挂_微信跳一跳物理外挂—教​你用 Python 来玩微信跳一跳
  10. C#网站发布在IIS10上,Access数据库读取为空白的解决方案
  11. 08.存储Cinder→5.场景学习→01.LVM Volume
  12. Gliffy Diagrams 安装问题
  13. python绘制社会关系网络图_python画社交网络图
  14. 阻抗测试仪软件,超声波换能器阻抗测试仪
  15. android 系统秒表,android自定义秒表(精确到0.1s,带计次功能)
  16. 山东省技能兴鲁职业技能竞赛-人工智能工程技术人员
  17. 联想拯救者R7000P加硬盘
  18. 【整理】3dsMax中贴图显示模糊
  19. 生命不息,折腾不止:Jetson Nano上手篇
  20. JQuery入门常用的一些方法、表单操作、正则验证

热门文章

  1. Wireshark 命令行捕获数据
  2. 怎样用u盘linux安装ntp协议,电脑中怎么配置NTP服务
  3. 汽车电子专业知识篇(二十)-深度解析CAN FD与传统CAN的差异
  4. 广西计算机二级450034考点,广西计算机等级考试报名地点
  5. 《02》let 和 const 命令
  6. php boolean 全大写还是全小写,【PHP培训】PHP为什么大小写规则是如此不规则?
  7. linux php 版本切换,linux更换PHP版本,多个PHP版本切换
  8. vuex 管理vue-router的传值
  9. Ajax全接触(1)
  10. vue之computed和watch