[英]Add to list elements Async in Java
我是 JAVA 的新手,有一个类似于下面提到的问题,我想通过异步处理将元素添加到数组中。 但是,返回的数组大小为 0 而不是正确的大小。
// Iterate over the products and transform them asynchronously
List<String> transformed = new ArrayList<>();
for (Product product : products) {
product.transform(rh -> {
transformed.add(rh.result());
});
}
// Check the transformed list.
System.out.println(transformed.size()) // should be 10 but is 0
我找不到一个简单的测试解决方案。 JAVA 中的示例实现是什么?
您只需在 Product 中扩展 Thread,然后使用 @Override 实现 function run()。 这使您能够像这样进行循环:
// Iterate over the products and transform them asynchronously
List<String> transformed = new ArrayList<>();
for (Product product : products) {
transformed.add(product.start());
}
// Check the transformed list.
System.out.println(transformed.size()) // should be 10 but is 0
.start() 启动一个运行方法 run() 的新线程。
您还可以将 ArrayList 转换为 Product 的属性,然后在 product.add() 中进行转换。
不确定我是否收到您的问题,但一种可能的方法是使用并行 stream 并在您的产品列表顶部使用映射或 foreach。
我做了一些假设,只是为了创建一个示例,但它看起来是这样的
private void yourMethod(List products){
List<String> transformed = products.parallelStream().map(this::transformation).collect(Collectors.toList());
// Check the transformed list.
System.out.println(transformed.size());
}
private String transformation(Product product){
// do some transformation
return "some transformed";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.