java - 用 lambda 表达式替换匿名函数

标签 java intellij-idea lambda java-8

我在 Java 8 映射操作中传递一个函数,Intellij 告诉我它可以用 lambda 表达式替换。但我不知道如何在不创建中间对象结构的情况下做到这一点。

这就是我所做的:

List<DocumentResult> documentResults = objects.getObject().stream()
                .map(new Function<ObjectType, DocumentResult>() {
                         @Override
                         public DocumentResult apply(ObjectType objectType) {
                             String[] keys = objectType.getStorageKey().getObjectName().split("/");
                             DocumentResult result = new DocumentResult(DocCategories.valueByLabel(keys[1]), DocCategoryGroups.valueByLabel(keys[2]), DocSubCategories.valueByLabel(keys[3]), keys[4], keys[5]);
                             result.setLink(objectType.getTempUrl().getFullUrl());
                             return result;
                         }
                     })
                .collect(Collectors.toList());

我认为 Intellij 建议我做什么:

List<DocumentResult> documentResults = objects.getObject().stream()
                .map(object -> object.getStorageKey().getObjectName().split("/"))
                .map(tab -> new DocumentResult(DocCategories.valueByLabel(tab[1]), DocCategoryGroups.valueByLabel(tab[2]), DocSubCategories.valueByLabel(tab[3]), tab[4], tab[5]))
                .collect(Collectors.toList());

我不知道一种干净的方法来获取我在匿名函数中检索到的 objectType.getTempUrl().getFullUrl() 部分,有什么建议吗?

最佳答案

你总是可以直接写

List<DocumentResult> documentResults = objects.getObject().stream()
                .map(objectType -> {
                         String[] keys = objectType.getStorageKey().getObjectName().split("/");
                         DocumentResult result = new DocumentResult(DocCategories.valueByLabel(keys[1]), DocCategoryGroups.valueByLabel(keys[2]), DocSubCategories.valueByLabel(keys[3]), keys[4], keys[5]);
                         result.setLink(objectType.getTempUrl().getFullUrl());
                         return result;
                     })
                .collect(Collectors.toList());

...仅使用普通的多行 lambda。

关于java - 用 lambda 表达式替换匿名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32955471/

相关文章:

java - 无法弄清楚为什么 System.out.println 不起作用

java - VisualVM 可以监控在 JRE 上运行的应用程序吗

maven - 从 IntelliJ 调用 maven 时如何解决缺少的 'javadoc' 命令问题?

ruby - 在 Ruby 中,如果我在循环内声明一个 lambda 函数,它会在每次迭代后正确清理吗?

c# - 从 LINQ 中提取 lambda 表达式

javascript - 使用 GWT JsInterop 实现 Javascript 函数回调

java - 无法让@Autowired 与 bean 一起工作

java - 无法在 IntelliJ IDEA 11 中执行程序

intellij-idea - 检查非 Java IntelliJ IDEA 项目的代码

c++ - 为什么 C++ lambda 是用仿函数而不是函数指针实现的?