Заменить анонимную функцию лямбда-выражением

java intellij-idea lambda java-8

3042 просмотра

1 ответ

Я передаю функцию в операции отображения Java 8, и Intellij говорит мне, что ее можно заменить лямбда-выражением. Но я не вижу, как я могу сделать это без создания промежуточной структуры объекта.

Вот что я делаю:

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 Источник Размещён: 12.11.2019 09:28

Ответы (1)


5 плюса

Решение

Вы всегда можете просто написать

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());

... просто используя обычную многострочную лямбду.

Автор: Louis Wasserman Размещён: 05.10.2015 06:35
Вопросы из категории :
32x32