最代碼廣告位
最代碼官方的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下載
頂部客服微信二維碼底部
>掃描二維碼關注最代碼為好友掃描二維碼關注最代碼為好友
福彩3d组选020前后关系