Java 如何提供lambda映射函数作为方法参数?
是否可以将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
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(","));
}