我正在编写一个应用程序,根据sms消息中使用的发件人,收件人和关键字重新发送收到的邮件。我有一个从sqlite获取并在hashmap中返回三个对象的类,如下所示。
receivedMessages=>map(
0=>map("_ID"=>1,
"sender"=>"*",
"recipient"=>"*",
"keyword"=>"*"
),
1=>map("_ID"=>2,
"sender"=>"8080",
"recipient"=>"*",
"keyword"=>"*"
),
2=>map("_ID"=>3,
"sender"=>"*",
"recipient"=>"22255",
"keyword"=>"*"
)
)
我很乐意使用它们中的每个属性及其对应的值在一个映射中将它们分组,而不是每次都因为效率而读取它们。从hashmap获取1000次比从sqlite读取1000次更有效。我想把它们放在一个hashmap或任何其他有效的容器上,如下所示。
messages=>map(
"hashmapSenders"=>map(
"*"=>map(1,3),
"8080"=>1,
)
"hashmapRecipients"=>map(
"*"=>map(1,2),
"22255"=>3,
)
"hashmapKeywords"=>map(
"*"=>map(1,2,3)
)
)
这样当我想要获取所有发件人和包含的值时,我会打电话 messages.get( “hashmapSenders”);
或获取收件人和我将调用的值 messages.get( “hashmapRecipients”);
或获取关键字和我将调用的值 messages.get( “hashmapKeywords”);
这是我到目前为止所拥有的
ArrayList<HashMap<String, String>> receivedMessages = getAllMessages();
Iterator<HashMap<String, String>> iterator = receivedMessages.iterator();
HashMap<String, HashMap<String, String>> messages = new HashMap<>();
HashMap<String, String> hashmapSenders = new HashMap<>();
HashMap<String, String> hashmapRecipients = new HashMap<>();
HashMap<String, String> hashmapKeywords = new HashMap<>();
while (iterator.hasNext()) {
HashMap<String, String> map = iterator.next();
hashmapSenders.put(map.get("sender"),map.get("_ID"));
hashmapRecipients.put(map.get("recipient"),map.get("_ID"));
hashmapRecipients.put(map.get("keyword"),map.get("_ID"));
}
messages.put("hashmapSenders", hashmapSenders);
messages.put("hashmapRecipients", hashmapRecipients);
messages.put("hashmapKeywords", hashmapKeywords);
我的代码中的问题是新值会覆盖旧值,所以我不会得到我想要的结果。请指教。谢谢。
答案 0 :(得分:0)
搜索SO后,我发现了类似的问题here
所以我修改了答案以适合我。这是我用过的方法
public void addToMap(HashMap<String, List<String>> map, String key, String value) {
if (!map.containsKey(key)) {
map.put(key, new ArrayList<String>());
}
map.get(key).add(value);
}
所以我的答案在下面
ArrayList<HashMap<String, String>> receivedMessages = getAllMessages();
Iterator<HashMap<String, String>> iterator = receivedMessages.iterator();
HashMap<String, List<String>> messages = new HashMap<>();
while (iterator.hasNext()) {
HashMap<String, String> map = iterator.next();
addToMap(messages, map.get("sender"),map.get("_ID"));
addToMap(messages, map.get("recipient"),map.get("_ID"));
addToMap(messages, map.get("keyword"),map.get("_ID"));
}