Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java从对象创建分组哈希表_Java_Android_Hashmap - Fatal编程技术网

Java从对象创建分组哈希表

Java从对象创建分组哈希表,java,android,hashmap,Java,Android,Hashmap,我正在编写一个应用程序,根据发件人、收件人和sms消息中使用的关键字重新发送收到的消息。我有一个类,它从sqlite获取并在hashmap中返回三个对象,如下所示 receivedMessages=>map( 0=>map("_ID"=>1, "sender"=>"*", "recipient"=>"*", "keyword"=>"*" ), 1=>map("_ID"=>2,

我正在编写一个应用程序,根据发件人、收件人和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);
ArrayList receivedMessages=getAllMessages();
迭代器迭代器=receivedMessages.Iterator();
HashMap消息=新建HashMap();
HashMap hashmapSenders=新HashMap();
HashMap hashmapRecipients=新建HashMap();
HashMap hashmapKeywords=新HashMap();
while(iterator.hasNext()){
HashMap=iterator.next();
hashmapSenders.put(map.get(“sender”)、map.get(“u ID”);
hashmapRecipients.put(map.get(“recipient”)、map.get(“\u ID”);
hashmapRecipients.put(map.get(“关键字”)、map.get(“ID”);
}
messages.put(“hashmapSenders”,hashmapSenders);
messages.put(“hashmapRecipients”,hashmapRecipients);
messages.put(“hashmapKeywords”,hashmapKeywords);

我的代码中的问题是,新值将覆盖旧值,因此我无法获得所需的结果。请给我一些建议。谢谢。

在搜索了SO之后,我发现了一个类似的问题

所以我修改了答案以适合我。这是我用的metnod

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);
    }
public void addToMap(HashMap映射、字符串键、字符串值){
如果(!map.containsKey(键)){
put(key,newarraylist());
}
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"));
ArrayList receivedMessages=getAllMessages();
迭代器迭代器=receivedMessages.Iterator();
HashMap消息=新建HashMap();
while(iterator.hasNext()){
HashMap=iterator.next();
addToMap(messages、map.get(“发送者”)、map.get(“ID”);
addToMap(messages、map.get(“收件人”)、map.get(“ID”);
addToMap(messages、map.get(“关键字”)、map.get(“ID”);

}

将HashMap声明为
HashMap
,然后将值插入指定键的ArrayList中。通过这种方式,您可以存储多个值。当仍在循环中时,如何在arraylist中插入该值?我应该对它们进行分组。我猜无论何时调用
hashmapSenders.put(map.get(“sender”)、map.get(“\u ID”)
,或者调用
put
,都会覆盖这些值。