coding
最代碼官方的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 LV99月17日
月亮月亮星星
李豪lihao LV32018年9月4日
星星星星星星
onemee LV332018年9月4日
太陽太陽星星
ReynLi LV82018年5月7日
月亮月亮
jic499 LV272018年4月14日
太陽月亮月亮星星星星星星
hahahaa LV52018年1月16日
月亮星星
lyh1989 LV342017年11月18日
太陽太陽星星星星
der2030 LV172017年8月3日
太陽星星
lzyjava LV92017年2月10日
月亮月亮星星
Lan魚兒 LV22016年6月3日
星星星星
最代碼最近瀏覽分享源代碼列表最近瀏覽
a784748083 LV910月11日
月亮月亮星星
tyctyctyc10月10日
暫無貢獻等級
慵懶的小橘貓 LV610月9日
月亮星星星星
Lp5080lp LV610月8日
月亮星星星星
靈依ziNing LV410月6日
月亮
ganglianhuo LV89月29日
月亮月亮
fhxylang LV19月22日
星星
wave小于 LV49月20日
月亮
我去買G橘子 LV49月19日
月亮
老中醫 LV49月18日
月亮
頂部客服微信二維碼底部
>掃描二維碼關注最代碼為好友掃描二維碼關注最代碼為好友
2008大乐透走势图