我在Java中对泛型不是很熟悉,我遇到了这样一个问题:假设您有自己的List实现,并且您想提供一种机制来同时使用某种映射(函数接口)将所有元素转换并将它们收集到一个新的列表中。
虽然函数接口(在我的情况下为IMapper)的想法和使用是直截了当的,但我无法想出执行映射的函数应该具有什么签名?
以下是一个小用例示例以及我所考虑的内容。不幸的是,它不起作用,我认为主要问题是:在这种情况下第二个V参数类型应该如何传递?
虽然函数接口(在我的情况下为IMapper)的想法和使用是直截了当的,但我无法想出执行映射的函数应该具有什么签名?
以下是一个小用例示例以及我所考虑的内容。不幸的是,它不起作用,我认为主要问题是:在这种情况下第二个V参数类型应该如何传递?
public interface IMapper<T,V> { V map(T v); }
public class MyList<T> extends ArrayList<T> {
public MyList<V> map(IMapper <T,V> mapper) {
MyList<V> list = new MyList<>();
for(T v : this) {
list.add(mapper.map(v));
}
return list;
}
}
// in main
MyList<Integer> list1 = new MyList<>();
// fill etc..
IMapper<Integer,String> m = (i) -> { return i.toString(); };
// "Change" list
MyList<String> list2 = list1.map(m);
PS: 我认为这种事情在Java中很可能已经实现了 (stream()
以及后面的内容我猜?),但这对我来说是一项练习。任何提示都将不胜感激 :)