将获取的数据转换为字符串,字符串数组映射

时间:2012-04-19 11:01:35

标签: java android collections hashmap

我从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并将数据发送到列在电话号码中的数组。那么如何才能将我获取的数据转换为字符串数组样式?

1 个答案:

答案 0 :(得分: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);
}

Google Collections有一个可以直接使用的多地图,但我认为您同意这已经足够了。

如果你想存储更多的项目(例如名字),你应该开始考虑一个将所有这些项目封装成一个连贯的东西的对象。 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。但你应该从我发布的代码中看到这个想法。