最代碼廣告位
最代碼官方的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 LV102019年9月17日
月亮月亮星星星星
李豪lihao LV42018年9月4日
月亮
onemee LV342018年9月4日
太陽太陽星星星星
ReynLi LV82018年5月7日
月亮月亮
jic499 LV272018年4月14日
太陽月亮月亮星星星星星星
hahahaa LV52018年1月16日
月亮星星
lyh1989 LV342017年11月18日
太陽太陽星星星星
der2030 LV172017年8月3日
太陽星星
lzyjava LV102017年2月10日
月亮月亮星星星星
Lan魚兒 LV22016年6月3日
星星星星
最代碼最近瀏覽分享源代碼列表最近瀏覽
zwb1235月12日
暫無貢獻等級
加油干陽神 LV25月2日
星星星星
25324521 LV14月23日
星星
Chris019 LV23月27日
星星星星
ldc199375 LV103月27日
月亮月亮星星星星
dengkaixing LV13月27日
星星
jerryfoxsun LV13月26日
星星
wxwpxh LV63月19日
月亮星星星星
zhouenyi LV43月9日
月亮
cyz3869515 LV13月1日
星星
頂部客服微信二維碼底部
>掃描二維碼關注最代碼為好友掃描二維碼關注最代碼為好友
海王捕鱼2内购破解版