Java 8 Обобщенный способ сопоставления коллекции объектов для данного свойства, переданный в виде строки - PullRequest
2 голосов
/ 04 февраля 2020

Я рассматривал этот вопрос здесь и, в частности, этот ответ.

List<Long> ids = viewValues.stream().map(ViewValue::getId).collect(Collectors.toList());

Мне было интересно, можно ли это как-то адаптировать для создания обобщенного служебного метода , но я застрял в синтаксисе для части map и использую какое-то отражение, чтобы получить имя получателя через строку.

Может ли кто-нибудь дать мне несколько советов относительно того, возможно ли это сделать и как исправить этот код?

public static List<String> getStringListOfCollectionProperty(List<T> l, String propName) {
        return l.stream().map(T::propName).collect(Collectors.toList());
}

Заранее спасибо.

PS: я не разрешено использовать сторонние библиотеки, такие как Guava et c.

1 Ответ

4 голосов
/ 04 февраля 2020

Позвольте вызывающему сделать отображение, отправив функцию (так же, как map()):

public static <T> List<String> getStringListOfCollectionProperty(List<T> l, 
      Function<T, String> propMapper) {
        return l.stream().map(propMapper).collect(Collectors.toList());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...