【问题标题】:Replace anonymous Function with lambda expression用 lambda 表达式替换匿名函数
【发布时间】:2015-10-05 18:32:46
【问题描述】:

我在 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() 部分的干净方法,有什么建议吗?

【问题讨论】:

  • 嗨,Bobuns。我并不完全理解你的问题。您说“我认为 IntelliJ 建议我做的事情......” 此语句下方的代码是通过 Alt+Enter 提供的想法还是您对建议工具提示的解释?氪
  • 这是我自己的解释,实际上是我的原始代码,我不得不添加这一行result.setLink(objectType.getTempUrl().getFullUrl());

标签: java intellij-idea lambda java-8


【解决方案1】:

你总是可以写

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。

【讨论】:

  • 哦,你是对的,使用 Intellij Alt + Enter 组合建议我这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-27
  • 1970-01-01
  • 2021-01-15
  • 2019-06-24
  • 1970-01-01
  • 2019-06-01
  • 2016-10-11
相关资源
最近更新 更多