多个List拼接,List长度不同默认增加

在写报表项目的过程中,遇到了一个很有意思的问题,展现在前端页面的最终结果样式,是由三个或者多个部分拼装到一起的,每一个部分的数据独立,需要排序以后拼装到一起。简单来说,就是每一个部分的数据查询计算出结果以后,不需要的数据删除,需要的数据按规定排序,再和其他部分的数据拼装到一起。

最终结果样式

比方说上面一个结果样式,就是有最大两部分拼装,分上下两部分,上下部分又各分三部分,即贷款余额表、贷款客户表和授信客户表,需要每一部分的数据拼装到一起,才是最终结果。

所以,这就需要考量每一部分的List.size是否相等的情况,不相等,自行增加String[]使相等,其实逻辑理顺,代码就很简单啦:

import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;

public class TestList {

	/**
	 * 排序公共方法
	 * 
	 * @param list
	 *            原始集合
	 * @param int
	 *            排序位数
	 */
	public static void sortMethod(List<String[]> list, final int sort) {
		Collections.sort(list, new Comparator<String[]>() {
			public int compare(String[] arg1, String[] arg2) {
				double d = Double.parseDouble(arg1[sort]) - Double.parseDouble(arg2[sort]);
				if (d > 0) {
					return -1;
				} else if (d == 0) {
					return 0;
				} else {
					return 1;
				}
			}
		});
	}

	// 根据名称删除不需要的数据
	public static List<String[]> CityNameRemoveMethod(List<String[]> strList, String cityName) {
		for (int i = strList.size() - 1; i >= 0; i--) {
			if (strList.get(i)[0].equals(cityName)) {
				strList.remove(i);
				System.out.println("删除指定" + cityName + "数据成功!");
			}
		}

		return strList;
	}

	// 调用该方法需保证两个list的size相同 不然无法拼接
	public static List<String[]> TogetherList(List<String[]> oneList, List<String[]> twoList) {
		List<String[]> result = new LinkedList<String[]>();
		String[] sub = new String[oneList.size() + twoList.size()];
		// 需要判断哪个size小

		if (oneList.size() == twoList.size()) {
			for (int i = 0; i < oneList.size(); i++) {
				sub = concat(oneList.get(i), twoList.get(i));
				result.add(sub);
			}
		} else {
			System.err.println("两个集合的size不同");
		}
		return result;
	}

	// 两个数组合二为一
	public static String[] concat(String[] one, String[] two) {
		String[] str = new String[one.length + two.length];
		System.arraycopy(one, 0, str, 0, one.length);
		System.arraycopy(two, 0, str, one.length, two.length);
		return str;
	}

	// 自动填充数据
	public static List<String[]> addString(List<String[]> oneList, int size) {
		// 判断长
		int len = 0;
		for (String[] strArr : oneList) {
			len = strArr.length;
			if (len != 0) {
				break;
			}
		}

		String[] str = new String[len];
		for (int i = 0; i < str.length; i++) {
			str[i] = "0"; // 默认填0
		}
		if (oneList.size() >= size) {
			System.err.println("根本不需要填充");
			return null;
		}
		while (oneList.size() < size) {
			oneList.add(str);
		}
		oneList.add(str); // 现在size肯定等
		if (oneList.size() == size) {
			System.err.println("填充完毕");
			return oneList;
		} else {
			System.err.println("出错");
			return null;
		}

	}

}

方法比较简单,就是觉得这种报表也是有意思,因为源数据可控性不是非常高,所以就记录一下咯。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值