¿Cómo proporcionar una función de mapeo lambda como parámetro de método?

membersound:

Es posible pasar una expresión lambda como un parámetro de la función? Ejemplo de la siguiente manera: Quiero pasar la "estrategia" que los extractos de inmuebles de elementos de la lista. Para no tener que repetir el mapeo de flujo de una y otra vez.

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(","));
}

actualización :

¿y si el tipo de objeto cambia? Todavía quiero tener mi general, map()método que define la recogida de la materia extraída. Pero a medida que cambia el tipo de objeto, sólo quiero suministrar una función que sabe cómo extraer la propiedad deseada.

class Person {
    String name;
} 

class Car {
    String manufacture;
}

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

utilizar un Function<MyObject, String>:

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

Actualizar:

aquí hay una implementación genérica:

private <T> String map(List<? extends T> list,  
           Function<? super T, ? extends CharSequence> func) {
       return list.stream().map(func).collect(Collectors.joining(","));
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=197844&siteId=1
Recomendado
Clasificación