Java 将lambda函数作为参数传递

Java 将lambda函数作为参数传递,java,function,lambda,parameters,java-8,Java,Function,Lambda,Parameters,Java 8,我试图在Java中创建一个与Javascript等价的程序 我已经能用它做了 ArrayList<String> data = myList.stream().map(e -> { return "test "+e; }).collect(Collectors.toCollection(ArrayList::new)); 然后用以下方式称呼它: ArrayList<String> data = DEF.map(myList,e -> { re

我试图在Java中创建一个与Javascript等价的程序

我已经能用它做了

ArrayList<String> data = myList.stream().map(e -> {
    return "test "+e;
}).collect(Collectors.toCollection(ArrayList::new));
然后用以下方式称呼它:

ArrayList<String> data = DEF.map(myList,e -> {
    return "test "+e;
});
ArrayList data=DEF.map(myList,e->{
返回“测试”+e;
});
但是我得到了错误

[Java]中的方法映射(ArrayList,函数) 类型DEF不适用于参数(列表( e) ->{})


如何编辑我的泛型函数以接受我正在使用的lambda?

您应该使用两个泛型类型参数定义方法-源列表的元素类型和目标列表的元素类型:

public static <S,T> ArrayList<T> map(ArrayList<S> list, Function<S,T> callback)
{
    return list.stream().map(callback).collect(Collectors.toCollection(ArrayList::new));
}
用法示例:

List<Integer> myList = Arrays.asList (1,2,3,4);
List<String> datai = map(myList ,e -> "test " + e);

啊,它在抱怨
List
ArrayList
。您应该编程到接口,即将参数更改为
列表
public static <S,T> List<T> map(List<S> list, Function<S,T> callback)
{
    return list.stream().map(callback).collect(Collectors.toList());
}
List<Integer> myList = Arrays.asList (1,2,3,4);
List<String> datai = map(myList ,e -> "test " + e);
[test 1, test 2, test 3, test 4]