Как обеспечить функцию лямбда-отображения в качестве параметра метода? - PullRequest
0 голосов
/ 09 января 2019

Можно передать лямбда-выражение в качестве параметра функции? Пример следующим образом: я хочу передать «стратегию», которая извлекает свойства из элементов списка. Для того, чтобы не повторять отображение потока снова и снова.

List<MyObject> list;

list.stream().map(item -> item.field1)).collector(Collectors.joining(","));
list.stream().map(item -> item.field2)).collector(Collectors.joining(","));
list.stream().map(item -> {
         //some complex parser function
    })).collector(Collectors.joining(","));
...

//pseudocode
private String map(List<MyObject> list, Function func) {
    return list.stream.map(item -> func.call()).collector(Collectors.joining(","));
}

Обновление

что если тип объекта изменится? Я все еще хочу иметь мой общий метод map(), который определяет сбор извлеченного поля. Но по мере изменения типа объекта я просто хочу предоставить функцию, которая знает, как извлечь требуемое свойство.

class Person {
    String name;
} 

class Car {
    String manufacture;
}

map(persons, (person) -> person.name));
map(cars, (car) -> car.manufacture));
map(cars, (MyObject) -> {
   //more complex parsing
}));

Ответы [ 2 ]

0 голосов
/ 09 января 2019

что если тип объекта изменится? Я все еще хочу иметь мою общую карту () метод, который определяет сбор извлеченного поля.

Здесь вы в основном ищете общий подход:

private <T> String map(List<T> list, Function<T, String> func) {
    return list.stream().map(func).collect(Collectors.joining(","));
}
0 голосов
/ 09 января 2019

используйте Function<MyObject, String>:

private String map(List<MyObject> list, Function<MyObject, String> func) {
        return list.stream().map(func).collect(Collectors.joining(","));
}

Обновление:

вот общая реализация:

private <T> String map(List<? extends T> list,  
           Function<? super T, ? extends CharSequence> func) {
       return list.stream().map(func).collect(Collectors.joining(","));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...