【例14.9】使用lambda表达式引用带泛型的方法(set集合)
创建函数式接口和测试类,在接口定义时添加泛型T,并且在抽象方法参数中使用此泛型。在测试类中创建带有泛型的静态方法,同样在方法参数中使用此泛型。抽象方法和类静态方法参数类型保持一致。类静态方法会利用哈希集合不保存重复数据的原理,实现过滤数组中的重复数据。
/*【例14.9】使用lambda表达式引用带泛型的方法(set集合)
* 创建函数式接口和测试类,在接口定义时添加泛型T,并且在抽象方法参数中使用此
* 泛型。在测试类中创建带有泛型的静态方法,同样在方法参数中使用此泛型。抽象
* 方法和类静态方法参数类型保持一致。类静态方法会利用哈希集合不保存重复数据
* 的原理,实现过滤数组中的重复数据。
* */
package lambdabdshlcl;
import java.util.HashSet;
interface ParadigmInterface<T>{
int method(T[] t);
}
public class ParadigmDemo{
static public <T> int repeatCoount(T[] t) {
// 静态方法,使用泛型参数,返回泛型。在方法名之前定义泛型。此方法用于查找数组中的重复元素个数。
int arrayLength = t.length; // 数组长度
HashSet<T> set = new HashSet<>(); // 哈希集合,不允许重复的元素
for(T tmp : t) { // foreach语句遍历数组,为集合添加元素
set.add(tmp);
}
return arrayLength - set.size(); // 返回数组中重复元素的个数
}
public static void main(String[] args){
Integer a[] = {1,1,2,3,1,5,6,1,8,8}; // 创建数组对象
String s[] = {"王","李","赵","陈","李","孙","张"};
ParadigmInterface<Integer> p1 = ParadigmDemo :: <Integer>repeatCoount; // 引用带泛型的方法
System.out.println("整数数组重复元素个数:"+p1.method(a));
System.out.println("整数数组重复元素个数:"+repeatCoount(a)); // 效果同引用带泛型的方法,作用是为了提高开发效率,照顾跨语言者的开发习惯
ParadigmInterface<String> p2 = ParadigmDemo :: <String>repeatCoount;
System.out.println("字符串数组重复元素个数:"+p2.method(s));
System.out.println("字符串数组重复元素个数:"+repeatCoount(s));
}
}