Zen*_*noo 2 java parameters lambda function java-8
我正在尝试Array#map用Java 创建一个与Javascript相同的东西.
我已经能够做到这一点
ArrayList<String> data = myList.stream().map(e -> {
return "test "+e;
}).collect(Collectors.toCollection(ArrayList::new));
Run Code Online (Sandbox Code Playgroud)
在这里,myList是最初的ArrayList,data是结果ArrayList.
但是,我发现每次这样做都非常繁琐.
所以我尝试创建一个让我的生活更轻松的通用函数:
public static ArrayList<?> map(ArrayList<?> list, Function<? super Object,?> callback){
return list.stream().map(callback).collect(Collectors.toCollection(ArrayList::new));
}
Run Code Online (Sandbox Code Playgroud)
然后调用它:
ArrayList<String> data = DEF.map(myList,e -> {
return "test "+e;
});
Run Code Online (Sandbox Code Playgroud)
但是我得到了错误
[Java] DEF类型中的方法map(ArrayList,Function)不适用于参数(List,(e) - > {})
如何编辑我的通用函数以接受我正在使用的lambda?
Era*_*ran 10
您应该使用两个泛型类型参数定义您的方法 - 源列表的元素类型和目标列表的元素类型:
public static <S,T> ArrayList<T> map(ArrayList<S> list, Function<S,T> callback)
{
return list.stream().map(callback).collect(Collectors.toCollection(ArrayList::new));
}
Run Code Online (Sandbox Code Playgroud)
使用List界面而不是ArrayList:
public static <S,T> List<T> map(List<S> list, Function<S,T> callback)
{
return list.stream().map(callback).collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)
用法示例:
List<Integer> myList = Arrays.asList (1,2,3,4);
List<String> datai = map(myList ,e -> "test " + e);
Run Code Online (Sandbox Code Playgroud)
输出:
[test 1, test 2, test 3, test 4]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |