Получить набор значений из enum, где item возвращает объект - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть Manufacture класс:

public class Manufacture {

   private String businessId;

   //Getter & Setter
   ...
}

Затем у меня есть enum с именем Product, каждый элемент переопределяет свой абстрактный метод, который возвращает Manufacture экземпляр:

public enum Product {
     FOO {
       @Override
       Manufacture getManufacture(){
            return // a instance of Manufacture
       }
     }

     BAR {
       @Override
       Manufacture getManufacture(){
            return // another instance of Manufacture
       }
     }

    abstract Manufacture getManufacture();
}

Я получаю Set<Manufacture> изготовления из перечисления Product по:

Set<Manufacture> manufactureSet = Stream.of(Product.values()).map(Product::getManufacture).collect(Collectors.toSet())

Но если я хочу получить Set<String> из businessId строки из статической функциивнутри Product, как это сделать?

Я думал:

 Set<String> businessIdSet = Stream.of(Product.values()).map(Product::getManufacture::getBusinessId).collect(Collectors.toSet())

Но ссылка на метод в steam .map(...) не может быть прикована цепью.

Ответы [ 2 ]

2 голосов
/ 26 сентября 2019

Вы можете связать вызовы карты, например:

    Set<String> businessIdSet = Stream.of(Product.values())
            .map(Product::getManufacture)
            .map(Manufacture::getBusinessId).collect(Collectors.toSet());
1 голос
/ 26 сентября 2019

Как упоминал Даниэль, вы можете объединить методы карты или же можно добиться с помощью лямбды на одной карте

Set<String> businessIdSet = Stream.of(Product.values())
            .map(p-> p.getManufacture().getBusinessId())
            .collect(Collectors.toSet());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...