最代码官方的gravatar头像
最代码官方 2016-04-08 18:56:10

java将List的数据转换为N列的算法演变

最近遇到一个安卓客户端的需求,需要将服务端返回的json list的数据转换为n列m行的需求,算法有几次迭代,总算趋于完美,给牛牛们分享下:

转换为2列的算法:

Column column = null;
for (int i = 0; i < items.size(); i++) {
	Item _item = items.get(i);
	if (i % 2 == 0) {
		column = new Column();
		column.setColumn1(_item);
		columns.add(column);
	} else {
		column.setColumn2(_item);
	}

}

for (int i = 0; i < columns.size(); i++) {
	System.out.println(columns.get(i));
}

运行结果:

----------------
1 2
3 4
5 6
7 8
9
----------------

2.转换为3列的算法:

List<Column3> column3s = new ArrayList<Column3>();

Column3 column3 = null;
for (int i = 0; i < items.size(); i++) {
	Item _item = items.get(i);
	int idx = i % 3;// 算余数
	int div = i / 3;// 算商
	if (idx == 0) {
		column3 = new Column3();
		column3.setColumn1(_item);
		column3s.add(column3);
	} else {
		column3 = column3s.get(div);
		idx++;// 偏移1
		if (idx == 2) {
			column3.setColumn2(_item);
		} else if (idx == 3) {
			column3.setColumn3(_item);
		}
	}

}

for (int i = 0; i < column3s.size(); i++) {
	System.out.println(column3s.get(i));
}

System.out.println("----------------");

运行结果:

----------------
1 2 3
4 5 6
7 8 9
----------------

3.转换为n列的算法:

List<ColumnN> columnNs = new ArrayList<ColumnN>();

int n = 4;//列数,可以随意指定
ColumnN columnN = null;
for (int i = 0; i < items.size(); i++) {
	Item _item = items.get(i);
	int idx = i % n;// 算余数
	int div = i / n;// 算商
	if (idx == 0) {
		columnN = new ColumnN(n);
		columnN.getColumnNs().add(0, _item);
		columnNs.add(columnN);
	} else {
		columnN = columnNs.get(div);
		columnN.getColumnNs().add(idx, _item);
	}

}

for (int i = 0; i < columnNs.size(); i++) {
	System.out.println(columnNs.get(i));
}

运行结果:
----------------
1 2 3 4
5 6 7 8
9

----------------

完整算法请下载文件。


打赏

文件名:Main.java,文件大小:4.336K 下载
最代码最近下载分享源代码列表最近下载
aisuzhen  LV10 2019年9月17日
李豪lihao  LV5 2018年9月4日
onemee  LV35 2018年9月4日
ReynLi  LV8 2018年5月7日
jic499  LV27 2018年4月14日
hahahaa  LV5 2018年1月16日
lyh1989  LV34 2017年11月18日
der2030  LV17 2017年8月3日
lzyjava  LV10 2017年2月10日
Lan鱼儿  LV2 2016年6月3日
最代码最近浏览分享源代码列表最近浏览
微信网友_6040315240812544  LV8 2022年10月20日
何俊霖  LV2 2021年11月3日
无花空折枝  LV9 2021年6月28日
天险无涯  LV15 2021年4月21日
zxmiii  LV3 2021年3月16日
纳木措 2021年1月12日
暂无贡献等级
javaZheng1  LV6 2021年1月12日
yuzhiyuan1977  LV2 2021年1月5日
忘记了很多  LV2 2020年8月27日
1204820258  LV6 2020年8月4日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友