将Android中的ArrayList转换为多维ArrayList

3
在我的项目中,我有一个像这样的数组列表:
{"data": 
[
{"Title": "Fiat 500", "Url":"http://lh5.ggpht.com/-wgCH-P1bWCo/UWW_eCUXsVI/AAAAAAAMaKI/MlRF0GzwF8Y/s1200/Fiat-Abarth-500-US-6%25255B2%25255D.jpg"},
{"Title": "Alfa Romeo", "Url": "http://i.auto-bild.de/ir_img/1/2/4/5/4/9/7/Alfa-Romeo-4C-Spider-Vorstellung-und-Preis-1200x800-24a91d418ddbd1fa.jpg"},
{"Title": "500L", "Url":"http://cdn1.autoexpress.co.uk/sites/autoexpressuk/files/fiat-500-turbo-front-action.jpg"},
{"Title": "Egea", "Url":"https://pbs.twimg.com/media/C6vp_VcU4AAaM0t.jpg"},
{"Title": "Maserati", "Url":"http://lh4.ggpht.com/-CjXVq7s2roU/U06cyjInzjI/AAAAAAAQwvI/xuJUZ0BbOUw/s1200/Maserati-Centennial-1%25255B2%25255D.jpg"},
{"Title": "Lancia", "Url":"http://lh6.ggpht.com/_FoXyvaPSnVk/TWl73Gr0lmI/AAAAAAAECw0/ZK7nAKZ6mdY/s1200/Lancia-Chrysler-30%5B5%5D.jpg"},
{"Title": "Jeep", "Url":"http://lh3.ggpht.com/-1UvJYZn4fR0/UyGvPSDIrZI/AAAAAAAQdR0/s2c70tIu1i0/s1200/Jeep-2%25255B3%25255D.jpg"},
{"Title": "Ferrari", "Url":"http://fm.cnbc.com/applications/cnbc.com/resources/img/editorial/2016/02/05/103366052-1957s.jpg?v=1454698344"},
{"Title": "Alfa Romeo", "Url":"http://lh3.ggpht.com/-lYmpe0bGJko/UnqlBB040wI/AAAAAAAO4yE/HbUaH9RxWR8/s1200/Alfa-Romeo-Gloria-Concept-by-IED-1%25255B4%25255D.jpg"},
{"Title": "Maserati", "Url":"http://zonderpump.com/images/maserati-granturismo-sport-can-you-feel-it2.jpg"}
]
}

我希望添加类似这样的项目,但是ViewPager和Adapter只能获取一个项目。因此,我想使我的ArrayList成为多维数组,并设置文本如下:textview.setText(list.getUsername[0或1]);

我该怎么做呢?非常感谢。 顺便说一句,我找到了这段代码:

function listToMatrix(list, elementsPerSubArray) {
    var matrix = [], i, k;

    for (i = 0, k = -1; i < list.length; i++) {
        if (i % elementsPerSubArray === 0) {
            k++;
            matrix[k] = [];
        }

        matrix[k].push(list[i]);
    }

    return matrix;
}

var matrix = listToMatrix([1, 2, 3, 4, 4, 5, 6, 7, 8, 9], 3);
// result: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

但是我该如何制作这个数组列表的项呢?

1个回答

5

看起来你的数据是JSON格式的;那么你应该去研究现有技术,不仅要研究解析,还要研究“如何对我的数据建模”;可以从这里开始。

但是为了回答你的实际问题,让我们看看不同的选项。

首先,你自己提出了一个二维列表。看起来像这样:

List<List<String>> matrix = new ArrayList<>();
// and then for each row (giving you code that creates similar data)
List<String> row = new ArrayList<>();
row.add("Title");
row.add("Fiat 500"); ...

matrix.add(row);

这个想法是:为每个输入行创建这样的行列表,然后将这些行添加到您的矩阵列表中。

但是仔细观察后,您会发现第一列和第三列是第二列/第四列的“键”。因此,更好的匹配可能是:

List<Map<String, String>> matrix = new ArrayList<>();
// and then for each row (giving you code that creates similar data)
Map<String, String> row = new HashMap<>();
row.put("Title", "Fiat 500"); ...
matrix.add(row);

意思是你使用一种数据结构来保留第一列和第二列之间的映射关系。

最后,到目前为止,我们一直在使用“平面”数据结构。但我们可以建立一个特殊的类,例如:

public class CarPictureInfo {
  private final String title;
  private final URL url;

  public CarPictureInfo(String title, URL url) ...

现在,您需要创建一个List<CarPictureInfo>对象,并使用一行数据来创建一个CarPictureInfo对象。(请注意:我建议不要将该URL存储为“原始”字符串,而是转换为具有更多含义的类型,而不仅仅是一个原始字符串。)
这些选项都有不同的优缺点;最终取决于您想如何处理数据,以理解哪种解决方案最适合您的需求。

谢谢回复。这对我帮助很大。 - Canberk Çakmak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接