gpt4 book ai didi

java - 将 lambda 函数作为参数传递

转载 作者:行者123 更新时间:2023-12-02 06:13:43 25 4
gpt4 key购买 nike

我正在尝试创建与 Javascript 的 Array#map 等效的东西在 Java 中。

我已经能够做到了

ArrayList<String> data = myList.stream().map(e -> {
return "test "+e;
}).collect(Collectors.toCollection(ArrayList::new));

这里,myList 是初始的 ArrayListdata 是生成的 ArrayList

但是,我觉得每次都这样做很乏味。

所以我尝试创建一个通用函数,让我的生活更轻松:

public static ArrayList<?> map(ArrayList<?> list, Function<? super Object,?> callback){
return list.stream().map(callback).collect(Collectors.toCollection(ArrayList::new));
}

然后调用它:

ArrayList<String> data = DEF.map(myList,e -> {
return "test "+e;
});

但是我得到了错误

[Java] The method map(ArrayList, Function) in the type DEF is not applicable for the arguments (List, ( 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 接口(interface)代替 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]

关于java - 将 lambda 函数作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50365290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com