可以将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(","));
}
Run Code Online (Sandbox Code Playgroud)
更新:
如果对象类型改变了怎么办?我仍然想要我的一般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
}));
Run Code Online (Sandbox Code Playgroud)
用一个Function<MyObject, String>:
private String map(List<MyObject> list, Function<MyObject, String> func) {
return list.stream().map(func).collect(Collectors.joining(","));
}
Run Code Online (Sandbox Code Playgroud)
更新:
这是一个通用的实现:
private <T> String map(List<? extends T> list,
Function<? super T, ? extends CharSequence> func) {
return list.stream().map(func).collect(Collectors.joining(","));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |