我从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并将数据发送到列在电话号码中的数组。那么如何才能将我获取的数据转换为字符串数组样式?
答案 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。但你应该从我发布的代码中看到这个想法。