在 lambda 表达式中创建的对象未存储

Posted

技术标签:

【中文标题】在 lambda 表达式中创建的对象未存储【英文标题】:Object created in lambda expression not stored 【发布时间】:2021-09-09 09:56:11 【问题描述】:

下面的代码sn-p,

String[][] users = user1, user2, user3, user4, user5;
    
Queue<Form> formList = new ArrayBlockingQueue<>(5);

Executor executor = Executors.newCachedThreadPool();
executor.execute(() -> 
    System.out.println(Thread.currentThread().getName());
    for(String[] user: users) 
        Form f = new Form(user[0], user[1], user[2], user[3], user[4]);
        formList.add(f);
    
);
System.out.println(formList);

我想将在 lambda 中创建的所有表单存储在 formList(队列)中。但它最后给了我空队列。任何建议

【问题讨论】:

【参考方案1】:

您要求执行程序在另一个线程上执行任务。这可能需要一些时间来启动必要的线程并执行工作,同时,您的主线程已经打印了formList 的当前内容(即什么都没有)。

为了能够打印任务的结果,您需要等到任务完成,例如关闭ExecutorService 并等待终止,或者使用ExecutorService.submit 而不是Executor.execute,以及收集返回的期货并在所有这些期货上使用get 以等待它们完成。还有很多其他选项,例如使用CompletionServiceCompletableFuture 等。

【讨论】:

以上是关于在 lambda 表达式中创建的对象未存储的主要内容,如果未能解决你的问题,请参考以下文章

Python3中lambda表达式介绍

lambda是函数对象

Access 中的表达式在 Excel 中未正确显示

如何为在 Cloudformation 中创建的 Lambda 设置 Cloudwatch 日志

为啥在未计算的操作数中不允许使用 lambda 表达式,但在常量表达式的未计算部分中允许使用 lambda 表达式?

如何使用动态对象作为 lambda 表达式的输入?