我在 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/