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超时?