最近遇到一个安卓客户端的需求,需要将服务端返回的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 column3s = new ArrayList();
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 columnNs = new ArrayList();
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
----------------
完整算法请下载文件。
本文介绍了一种将服务端返回的JSON列表转换为n列m行数据的算法实现,适用于安卓客户端应用开发。该算法经过多次迭代改进,能够灵活地处理不同列数的数据展示需求。
5978

被折叠的 条评论
为什么被折叠?



