0

我正在从 android 中的 sqlite 获取数据,如下所示

  URL                     PHONE
---------------------------------
/test/img1.png          98989898
/test/img1.png          61216121
/test/img2.png          75757575
/test/img2.png          40404040
/test/img3.png          36363636

现在我想创建一个这样的地图来存储数据如下

   /test/img1.png          [98989898 , 61216121 ]
   /test/img2.png          [75757575 , 40404040 ]
   /test/img3.png          [36363636]

这样我就可以将整个地图传递给函数,该函数最终在后台获取图像 url 并将数据发送到列出的电话号码的数组。那么如何将获取的数据转换为字符串数组样式的键?

4

1 回答 1

4

我会创建一个Map<String, List<String>>(又名“多地图”)。如果您使用List<String>. 如果您选择阵列路线,情况并非如此。

Map<String, List<String>> results = new HashMap<String, List<String>>();
while (rs.next()) {
    String url = rs.getString(1);
    String phone = rs.getString(2);
    List<String> phones = (results.contains(url) ? results.get(url) : new ArrayList<String>());
    phones.add(phone);
    results.put(url, phones);
}

谷歌收藏有一个多地图,你可以开箱即用,但我想你会同意这已经足够了。

如果您想存储更多项目(例如名称),您应该开始考虑将所有项目封装在一起成为一个连贯事物的对象。Java 是一种面向对象的语言。你听起来好像因为你的想法太低而感到内疚。字符串、原语和数据结构是对象的构建块。也许你在这里需要一个人:

package model;

public class Person {
    private String name;
    private Map<String, List<String>> contacts;

    // need constructors and other methods.  This one is key
    public void addPhone(String url, String phone) {
        List<String> phones = (this.contacts.contains(url) ? this.contacts.get(url) : new ArrayList<String>());
        phones.add(phone);
        this.contacts.put(url, phones);
    }
}

我会把剩下的留给你。

如果采用这种方式,则需要将结果集映射到 Person。但是您应该从我发布的代码中看到这个想法。

于 2012-04-19T11:05:32.630 回答