java用匿名内部类实现类似jquery.map和join方法

jquery的map方法可以把List<map>对象中的某项属性提取成list对象,然后join拼接成字符串,java中却没有类似的方法。我之前写过List<String>和String[]对象的join方法

	public static String join(List<String> arr,String split) {
		if(arr == null || arr.isEmpty())
			return "";
		else {
			StringBuilder sb = new StringBuilder();
			for(String s:arr) {
				sb.append(s+split);
			}
			return sb.substring(0, sb.length()-split.length()).toString();
		}
			
	}

想要实现任意对象的join第一想法就是使用反射,将需要反射的字段字符串传进来,但是这样直接输入字符串比较low,要是字段修改了就容易出现问题,一般来说我也不喜欢直接在代码中使用字符串,一般也用枚举或静态常量。于是一番考虑之下我决定使用匿名方法实现更加灵活的方案。

public class StringUtils {
    public abstract static class Joint<T> {
    	
    	public abstract String map(T t);
    	
    }

	public static <T> String join(List<T> arr,String split, Joint joint) {
		if(arr == null || arr.isEmpty())
			return "";
		else {
			StringBuilder sb = new StringBuilder();
			for(T s:arr) {
				sb.append(joint.map(s)+split);
			}
			return sb.substring(0, sb.length()-split.length()).toString();
		}
			
	}
	public <T> String[] map(List<T>	list, Joint joint) {
		if(list == null)return new String[0];
		String[] arr = new String[list.size()];
		for(int i=0;i<list.size();i++) {
			arr[i] = joint.map(list.get(i));
		}
		return arr;
	};
    public static void main(String[] args) {
		List<BaseUserModel> list = new ArrayList<>();
		BaseUserModel u1 = new BaseUserModel();
		u1.setRealName("张三");
		list.add(u1);
		BaseUserModel u2 = new BaseUserModel();
		u2.setRealName("李四");
		list.add(u2);
		System.out.println(StringUtils.join(list, ",", new StringUtils.Joint<BaseUserModel>() {
			@Override
			public String map(BaseUserModel t) {
				return t.getRealName() + "1";
			}
		}));
		System.out.println(StringUtils.join(list, ",",  new StringUtils.Joint<BaseUserModel>() {
			@Override
			public String map(BaseUserModel t) {
				return t.getRealName() + "2";
			}
		}));
	}

}

执行结果

这里使用静态内部类的原因是普通的内部类需要实例化外部类再用外部类实例化内部类,我觉得首先是麻烦,其次是不符合逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值