繁体   English   中英

添加到 Java 中的异步列表元素

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM