java – 从并行流中收集结果
发布时间:2020-12-15 04:46:09 所属栏目:Java 来源:网络整理
导读:我有一段这样的代码: ListEgg eggs = hens.parallelStream().map(hen - { ArrayListEgg eggs = new ArrayList(); while (hen.hasEgg()) { eggs.add(hen.getEgg()); } return eggs;}).flatMap(Collection::stream).collect(Collectors.toList()); 但是通过这
|
我有一段这样的代码:
List<Egg> eggs = hens.parallelStream().map(hen -> {
ArrayList<Egg> eggs = new ArrayList<>();
while (hen.hasEgg()) {
eggs.add(hen.getEgg());
}
return eggs;
}).flatMap(Collection::stream).collect(Collectors.toList());
但是通过这种方式,我必须为每只母鸡创建一个ArrayList,并且在母鸡100%处理之前不会收集鸡蛋.我想要这样的东西: List<Egg> eggs = hens.parallelStream().map(hen -> {
while (hen.hasEgg()) {
yield return hen.getEgg();
}
}).collect(Collectors.toList());
但Java没有收益率.有没有办法实现它? 解决方法
您的Hen类很难适应Stream API.如果您无法更改它并且没有其他有用的方法(例如Collection< Egg> getAllEggs()或Iterator< Egg> eggIterator()),您可以创建如下的egg流:
public static Stream<Egg> eggs(Hen hen) {
Iterator<Egg> it = new Iterator<Egg>() {
@Override
public boolean hasNext() {
return hen.hasEgg();
}
@Override
public Egg next() {
return hen.getEgg();
}
};
return StreamSupport.stream(Spliterators.spliteratorUnknownSize(it,0),false);
}
现在您可以通过以下方式使用它: List<Egg> eggs = hens.parallelStream()
.flatMap(hen -> eggs(hen))
.collect(Collectors.toList());
当然,如果您可以更改Hen类,则可以实现更好的Stream实现. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 浅谈Async和Await如何简化异步编程(几个实例让你彻底明白)
- JDK 7u79中javax.smartcardio.Card.disconnect(boolean res
- try-catch块不能抑制java.lang.NullPointerException
- 如何避免在包装类中重复复杂的异常处理代码?
- 【TCP传输数据】
- java – Android:无法调用没有args的私有android.net.Uri(
- java – Kafka – 使用高级消费者的延迟队列实现
- java – 按位和0x3FF做什么?
- java读取csv文件示例分享(java解析csv文件)
- 为什么epoll_wait只提供超长的1ms超时?
