finditerable 转list_java – 通过拆分和运行将ListenableFuture转换为Iterable
(替代
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相关推荐
- java拆分list_Java平均拆分list
为了使用并发计算,有时候需要对list做拆分.而java中默认的subList方法满足不了这种需求,那就自己动手写一个吧. package demo18; import java.util.Array ...
- linux文件名小写变大写命令,通过Ubuntu命令行将文件名转换为小写
在使用Linux时,您可能会遇到一些仅使用小写文件名的实用程序和应用程序.我们通常不以这种格式保存文件,因此可能需要寻找一种解决方法,将文件夹中的所有文件名递归转换为小写.在本文中,我们将向您展示两种 ...
- 在阿里云的CentOS 6.5 上面安装 timidity++ 和 ffmpeg(含libmp3lame) 实现命令行将midi转换为mp3...
首先使用yum安装需要的组件 yum install -y automake autoconf libtool gcc gcc-c++ yasm yasm-devel 然后从sourceforge下载 ...
- Flashback Oracle文档阅读
和Flashback相关的文档大多位于备份和恢复用户指南 和Oracle 数据库开发指南中. 基本概念 请参看备份和恢复用户指南的1.4 About Oracle Flashback Technolo ...
- 聊聊 Kafka: Kafka 的基础架构
一.我与快递小哥的故事 一个很正常的一个工作日,老周正在忙着啪啪啪的敲代码,办公司好像安静的只剩敲代码的声音.突然,我的电话铃声响起了,顿时打破了这种安静. 我:喂,哪位? 快递小哥:我是顺丰快递的, ...
- Kafka官方文档翻译——简介
简介 Kafka擅长于做什么? 它被用于两大类应用: 在应用间构建实时的数据流通道 构建传输或处理数据流的实时流式应用 几个概念: Kafka以集群模式运行在1或多台服务器上 Kafka以topics ...
- 【KVM系列01】KVM简介及安装
第一章 KVM简介及安装 1. KVM 介绍 1.0 虚拟化简史 1.1 KVM 架构 2. KVM 的功能列表 3. KVM 工具集合 4. RedHat Linux KVM 安装 4.1 在安装 ...
- openstack项目【day23】:KVM介绍
阅读目录 什么是kvm 为何要用kvm kvm的功能 常见虚拟化模式 KVM架构 KVM工具集合 一 什么是kvm KVM 全称 Kernel-Based Virtual Machine.也就是说 K ...
- 你需要了解操作系统发展历程
本文我们大概回顾计算机操作系统发展历程,这里不会记录关于操作系统的完整历史记录,只是记录那些里程碑事件,看看各位接触计算机时,操作系统发展正处于哪个年代 起初 没有操作系统,没有编程语言或编译器,甚至 ...
最新文章
- hibernate Expression详解
- FACTORY设计模式【让吃货也能理解的程序】
- ML之SR:Softmax回归(Softmax Regression)的简介、使用方法、案例应用之详细攻略
- 六、继续学习Java的位运算符,发现真的简单
- Silverlight实例教程 - Out of Browser的Debug和Notifications窗口
- 计算机组成原理的实验课心得,计算机组成原理移位控制实验心得.docx
- 502无法解析服务器标头_编写下载服务器。 第二部分:标头:Last-Modified,ETag和If-None-Match...
- Python---利用蒙特.卡罗方法计算圆周率近似值
- 跳一跳python开挂_微信跳一跳物理外挂—教​你用 Python 来玩微信跳一跳
- C#网站发布在IIS10上,Access数据库读取为空白的解决方案
- 08.存储Cinder→5.场景学习→01.LVM Volume
- Gliffy Diagrams 安装问题
- python绘制社会关系网络图_python画社交网络图
- 阻抗测试仪软件,超声波换能器阻抗测试仪
- android 系统秒表,android自定义秒表(精确到0.1s,带计次功能)
- 山东省技能兴鲁职业技能竞赛-人工智能工程技术人员
- 联想拯救者R7000P加硬盘
- 【整理】3dsMax中贴图显示模糊
- 生命不息,折腾不止:Jetson Nano上手篇
- JQuery入门常用的一些方法、表单操作、正则验证