Java 如何提供lambda映射函数作为方法参数?

Java 如何提供lambda映射函数作为方法参数?,java,java-stream,Java,Java Stream,是否可以将lambda表达式作为函数参数传递?示例如下:我希望传递从列表项中提取属性的“策略”。不必一次又一次地重复流映射 List<MyObject> list; list.stream().map(item -> item.field1)).collector(Collectors.joining(",")); list.stream().map(item -> item.field2)).collector(Collectors.joining(",")); li

是否可以将lambda表达式作为函数参数传递?示例如下:我希望传递从列表项中提取属性的“策略”。不必一次又一次地重复流映射

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(","));
}
使用
功能

私有字符串映射(列表,函数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(","));
}
私有字符串映射(列表
如果对象类型改变了怎么办?我仍然想要我的常规映射()
方法,该方法定义提取字段的收集

您主要在这里寻找一种通用方法:

private <T> String map(List<T> list, Function<T, String> func) {
    return list.stream().map(func).collect(Collectors.joining(","));
}
私有字符串映射(列表,函数func){
return list.stream().map(func.collect)(Collectors.joining(“,”);
}

这很好。如果对象发生更改,它的实现没有接口,该怎么办?我是否也可以将方法提取器作为函数提供?membersound您只能传递lambda方法引用,其中目标类型是具有匹配函数描述符的函数接口。可能这没有完全回答您的问题?如果是你能举个例子说明你的意思吗?我在我的问题中添加了一个例子,也许现在更清楚了?我只是注意到现在只是如何概括特定列表类型的解析。我只想提供一个映射函数,传入我拥有的任何列表类型,并提供提取策略。可能使用泛型?好的缺失的部分:)
private <T> String map(List<? extends T> list,  
           Function<? super T, ? extends CharSequence> func) {
       return list.stream().map(func).collect(Collectors.joining(","));
}
private <T> String map(List<T> list, Function<T, String> func) {
    return list.stream().map(func).collect(Collectors.joining(","));
}