Java开发笔记(六十三)双冒号标记的方法引用

本文介绍了Java中函数式接口的应用,特别是在数组处理中的实际操作,如使用方法引用进行数组元素筛选和排序。通过示例展示了如何定义过滤器接口,使用方法引用简化Lambda表达式,以及如何在Arrays.sort方法中使用方法引用进行字符串比较和排序。
摘要由CSDN通过智能技术生成

前面介绍了如何自己定义函数式接口,本文接续函数式接口的实现原理,阐述它在数组处理中的实际应用。数组工具Arrays提供了sort方法用于数组元素排序,可是并未提供更丰富的数组加工操作,比如从某个字符串数组中挑选符合条件的字符串并形成新的数组。现在就让我们从零开始,利用函数式接口实现数组元素筛选的功能。
首先要定义一个字符串的过滤器接口,该接口内部声明了一个用于字符串匹配的抽象方法,由此构成了如下所示的函数式接口代码:

//定义字符串的过滤接口
public interface StringFilter {

	// 声明一个输入参数只有源字符串的抽象方法
	public boolean isMatch(String str);
}

接着编写一个字符串处理工具类,在工具类里面定义一个字符串数组的筛选方法select,该方法的输入参数包括原始数组和过滤器实例,方法内部根据过滤器的isMatch函数判断每个字符串是否符合筛选条件,并把所有符合条件的字符串重新生成新数组。按此思路实现的工具类代码如下所示:

//定义字符串工具类
public class StringUtil {
	
	// 根据过滤器StringFilter从字符串数组挑选符合条件的元素,并重组成新数组返回。
	// 其中StringFilter只对字符串元素自身进行校验。
	public static String[] select(String[] originArray, StringFilter filter) {
		int count = 0;
		String[] resultArray = new String[0];
		for (String str : originArray) { // 遍历所有字符串
			if (filter.isMatch(str)) { // 符合过滤条件
				count++;
				// 数组容量增大一个
				resultArray = Arrays.copyOf(resultArray, count);
				// 往数组末尾填入刚才找到的字符串
				resultArray[count-1] = str;
			}
		}
		return resultArray;
	}
}

然后在外部构建原始的字符串数组,并通过StringUtil工具的select方法对其进行数据挑选。为了能看清过滤器实例的完整面貌,一开始还是以匿名内部类形式声明,这样外部的调用代码示例如下:

// 在挑选符合条件的数组元素时,可采取方法引用
private static void testSelect() {
	// 原始的字符串数组
	String[] strArray = { "Hello", "world", "What", "is", "The", "Wether", "today", "" };
	// 筛选后的字符串数组
	String[] resultArray;
	// 采取匿名内部类方式筛选字符串数组
	resultArray = StringUtil.select(strArray, new StringFilter() {
		@Override
		public boolean isMa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值