Java泛型函数
背景
PHP的Array以方便灵活著称,再加上丰富的库函数,可以让开发者灵活的应对大部分需求。经常和数据库打交道的同学,肯定熟悉这个方法array_column
array_column() 返回input数组中键值为column_key的列, 如果指定了可选参数index_key,那么input数组中的这一列的值将作为返回数组中对应值的键。
做Java后,我们也常碰到需要如此操作的场景,但并没有合适的库函数,于是本着解放劳动力的出发点,打算自己开发一个。但是由于Java是一个强类型语言,我们经常会碰到如此的类型List<T>
,如下:
public class UserInfo {
private String userName = "codecooker";
private Integer age = 18;
}
public class school {
private List<UserInfo> students;
public List<String> getStudentNameList() {
// 原始的做法,我们需要遍历
List<String> studentName = new ArrayList<>();
for (UserInfo usInfo : this.students) {
studentName.add(usInfo.userName);
}
return studentName;
}
}
泛型方法
解决方案是由于看到系统函数的实现有所启发,想到了泛型函数。下面从自己的理解对泛型函数做一个简单的解释
一般的泛型函数形式如下:
其中
1表示在此泛型函数中我们定义要使用的泛型,这里只代表一个符号,可以试T也可以是
2表示该泛型函数的返回类型,必须是已经定义过的类型,比如是T或者U
3方法名
4、5参数列表
这里需要注意区分泛型方法和不同泛型类内使用泛型的方法的区别,例如:
public class Test<T> {
// 泛型方法
public static <T,U> List<T> clounms(List<U> list, Function<U,T> function);
// 不同类成员方法,只不过是返回了一个类定义时的泛型列表
public List<T> getALl();
}
其实,按照我的理解,最重要的区别就是是否有在方法定义时有泛型的定义过程,如果有则是泛型方法。
实现array_column方法
有了上面的铺垫,我们可以定义简单的泛型方法来实现array_column
的功能
public class ListUtil {
public static <T,U> List<T> clounms(List<U> list, Function<U,T> function) {
List<T> result = new ArrayList<>();
for (U u :
list) {
result.add(function.apply(u));
}
return result;
}
}
如此,完成