用lambda表达式替换匿名函数
问题描述:
我在Java 8映射操作中传递函数,Intellij告诉我它可以用lambda表达式替换。但是我没有看到如何创建一个中间对象结构。用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());
...只是使用普通的多行拉姆达。
+1
哦,你是对的,使用Intellij Alt +输入组合建议我这样做。 – bobuns
嗨Bobuns。我并不完全理解你的问题。你说“我能想到IntelliJ建议我做什么......”该代码下面的代码通过Alt + Enter提供了什么想法,或者是您对建议工具提示的解释? Kr – jtonic
这是我自己的解释,实际上它是我原来的代码之前,我不得不添加此行'result.setLink(objectType.getTempUrl()。getFullUrl());' – bobuns