最代码官方的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下载
最代码最近下载分享源代码列表最近下载
ReynLi LV65月7日
月亮星星星星
jic499 LV274月14日
太阳月亮月亮星星星星星星
hahahaa LV51月16日
月亮星星
lyh1989 LV312017年11月18日
太阳月亮月亮月亮星星星星星星
der2030 LV172017年8月3日
太阳星星
lzyjava LV92017年2月10日
月亮月亮星星
Lan鱼儿 LV22016年6月3日
星星星星
zhaolong1990ok LV102016年5月15日
月亮月亮星星星星
qinchan LV22016年5月11日
星星星星
点炉烹茶 LV82016年4月22日
月亮月亮
最代码最近浏览分享源代码列表最近浏览
832045 LV22小时前
星星星星
hyt1996 LV15小时前
星星
9768268407小时前
暂无贡献等级
891353192 LV1昨天
星星
Mingelam LV67月16日
月亮星星星星
sangyy LV77月12日
月亮星星星星星星
杂回事类丶 LV107月12日
月亮月亮星星星星
wxtsuper37月10日
暂无贡献等级
Space LV297月9日
太阳月亮月亮月亮星星
IT达人 LV167月8日
太阳
顶部客服微信二维码底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友