标签: multimap

将Guava HashMultimap转换为json

我想将HashMultiMap打印为json.

HashMultimap<String,Object> multimap = HashMultimap.create();
multimap.put("a",Obj1);
multimap.put("a",Obj3);
multimap.put("b",Obj2);
Run Code Online (Sandbox Code Playgroud)

{ 
  "a":[Obj1,Obj3],
  "b":[Obj2]
}
Run Code Online (Sandbox Code Playgroud)

Obj1和其他对象应该再次在json中(为了保持它清洁,我已经将它显示为对象)
我可以迭代各个键并使用诸如Gson之类的库将对象集转换为json.

但是要获取HashMultimap的整个快照,我想将其转换为json并检查它.

Gson无法转换整个地图,但可以做单个值(对象列表为json)

json multimap gson guava

13
推荐指数
2
解决办法
6895
查看次数

什么是multimap :: emplace()和move()?

我正在查看关于multimap的MSDN文档,并发现它有一个成员函数multimap :: emplace().以下是该成员函数的示例.

int main( ) {
   using namespace std;
   multimap<int, string> m1;
   pair<int, string> is1(1, "a");

   m1.emplace(move(is1));
}
Run Code Online (Sandbox Code Playgroud)

看来,emplace()move()是C++ 0x中.有人可以帮我解释一下吗?我读到了move(),但我真的不明白它做了什么(引擎盖下).

c++ stl multimap rvalue-reference c++11

11
推荐指数
1
解决办法
1723
查看次数

guava:迭代Multimap的key->集合条目的最佳方法?

我正在寻找相应的方法,用于Multimap迭代a的条目Map,即:

Map<K,V> map = ...;
for (Map.Entry<K,V> entry : map.entrySet())
{
    K k = entry.getKey();
    V v = entry.getValue();
}
Run Code Online (Sandbox Code Playgroud)

以下哪项更好?(或者更重要的是,有什么区别?)

Multimap<K,V> mmap = ...;
for (Map.Entry<K,Collection<V>> entry : mmap.asMap().entrySet())
{
    K k = entry.getKey();
    Collection<V> v = entry.getValue();
}
Run Code Online (Sandbox Code Playgroud)

要么

Multimap<K,V> mmap = ...;
for (K k : mmap.keySet())
{
    Collection<V> v = mmap.get(k);
}
Run Code Online (Sandbox Code Playgroud)

loops multimap guava

11
推荐指数
1
解决办法
8485
查看次数

如何实现这个Map <String,List <>>结构

我有如下数据:

 Key       value
-----      ------
car         toyota
car         bmw
car         honda

fruit       apple
fruit       banana

computer    acer
computer    asus
computer    ibm 
...
Run Code Online (Sandbox Code Playgroud)

(上述数据中的每一行是一个对象与字段"键"和"值",都在一个列表List<DataObject>)

我想将数据构建成Map<String, List<String>>如下所示:

 "car"      : ["toyota", "bmw", "honda"]
 "fruit"    : ["apple","banana"]
 "computer" : ["acer","asus","ibm"]
Run Code Online (Sandbox Code Playgroud)

如何Map从数据对象中实现上述结构?

******除了******

我更感兴趣的是使用纯JDK提供的类或接口来实现结果,而不是使用外部库.有帮助吗?

java multimap data-structures multi-mapping

11
推荐指数
5
解决办法
5万
查看次数

是否有类似Multimap数据结构的javascript?

Multimap是一种将键映射到列表/值集的数据结构.

有没有一个好的,不显眼的js库来实现这个数据结构?

编辑 - 我知道我可以"轻松"自己实现它,但我相信将它作为一个独立的抽象是一件好事,所以这些问题的答案不应该"只是自己实现".

javascript multimap data-structures

11
推荐指数
1
解决办法
7106
查看次数

在迭代时擦除多图中的元素

我正在写一个节点路径寻找算法.我需要在一定条件下运行多图并从中删除元素,但要继续迭代多图.下面是我的代码到目前为止,它似乎大部分时间都有效,但偶尔我在做nct_it ++时会出错.在递增迭代器之前从表中擦除迭代器指针是否安全?

std::list<SinkSourceNodeConn>::iterator it;
std::multimap<SysNode*, SysNode*>::iterator nct_it;
SysNode* found_node = NULL;
nct_it = node_conn_table.begin();
while(nct_it != node_conn_table.end()) {

    // Find the node in the ever shrinking node connection table...
    if(nct_it->first == parent_node)
        found_node = nct_it->second;

    // Remove the table entry if we have found a node
    if(found_node) {
        // Search for the node in the expanded list. If it's not found, add it.
        bool found_the_node = false;
        for(it = m_sink_source_nodes_.begin(); it != m_sink_source_nodes_.end(); it++) {
            if(it->sink_source == sink_source && it->node …
Run Code Online (Sandbox Code Playgroud)

c++ iterator multimap

11
推荐指数
1
解决办法
8157
查看次数

Scala不可变MultiMap

在Scala我希望能够写

val petMap = ImmutableMultiMap(Alice->Cat, Bob->Dog, Alice->Hamster)
Run Code Online (Sandbox Code Playgroud)

底层Map [Owner,Set [Pet]]应该同时具有Map和Set不可变.这是ImmutibleMultiMap与伴随对象的初稿:

import collection.{mutable,immutable}

class ImmutableMultiMap[K,V] extends immutable.HashMap[K,immutable.Set[V]]

object ImmutableMultiMap {
  def apply[K,V](pairs: Tuple2[K,V]*): ImmutableMultiMap[K,V] = {
    var m = new mutable.HashMap[K,mutable.Set[V]] with mutable.MultiMap[K,V]
    for ((k,v) <- pairs) m.addBinding(k,v)
    // How do I return the ImmutableMultiMap[K,V] corresponding to m here?
  }
}
Run Code Online (Sandbox Code Playgroud)

你能优雅地解决评论线吗?地图和集合都应该是不可变的.

谢谢!

scala map immutability multimap scala-collections

10
推荐指数
2
解决办法
2980
查看次数

C++:STL multimap.equal_range()

我有这个代码,我无法理解equal_range方法返回迭代器的部分.我知道范围是配对对象里面有两个多图对象,但是我没有得到,这就是为什么'for (it = range.first; it != range.second; ++it)'- 这究竟是 什么意思?

// multmap.cpp -- use a multimap
#include <iostream>
#include <string>
#include <map>
#include <algorithm>

typedef int KeyType;
typedef std::pair<const KeyType, std::string> Pair;
typedef std::multimap<KeyType, std::string> MapCode;

int main()
{
using namespace std;
MapCode codes;
codes.insert(Pair(415, "San Francisco"));
codes.insert(Pair(510, "Oakland"));
codes.insert(Pair(718, "Brooklyn"));
 codes.insert(Pair(718, "Staten Island"));
  codes.insert(Pair(415, "San Rafael"));
  codes.insert(Pair(510, "Berkeley"));

  cout << "Number of cities with area code 415: "
    << codes.count(415) << endl;
  cout …
Run Code Online (Sandbox Code Playgroud)

c++ stl multimap

10
推荐指数
2
解决办法
1万
查看次数

一个Java多图,允许按值快速查找键

我有一个multimap(就像Guava提供的那样):

Multimap<K, V>
Run Code Online (Sandbox Code Playgroud)

这在逻辑上可以看作:

Map<K, Set<V>>
Run Code Online (Sandbox Code Playgroud)

我的multimap中的数据具有唯一键和唯一值.即,永远不会将相同的值分配给多个键.

除了维护两个Map结构之外,是否有人知道现有的class/api可能会让我通过键或值快速查找.

例如

Collection<V> get(K)

...and...

K getKeyByValue(V)
Run Code Online (Sandbox Code Playgroud)

顺便说一句,地图必须是可变的,即我的数据一直在变化.(对于不可变映射,Guava提供了一个ImmutableMultimap.inverse(),如果我的Map可以是不可变的,它将解决这个问题.)

任何帮助都会得到赞赏.

java multimap guava

10
推荐指数
1
解决办法
1147
查看次数

杰克逊JSON - 反编译Commons MultiMap

我想使用JSON序列化和反序列化MultiMap(Apache Commons 4).

要测试的代码片段:

MultiMap<String, String> map = new MultiValueMap<>();
map.put("Key 1", "Val 11");
map.put("Key 1", "Val 12");
map.put("Key 2", "Val 21");
map.put("Key 2", "Val 22");

ObjectMapper mapper = new ObjectMapper();
String jsonString = mapper.writeValueAsString(map);
MultiMap<String, String> deserializedMap = mapper.readValue(jsonString, MultiValueMap.class);
Run Code Online (Sandbox Code Playgroud)

序列化工作正常,并产生我期望的格式:

{"Key 1":["Val 11","Val 12"],"Key 2":["Val 21","Val 22"]}
Run Code Online (Sandbox Code Playgroud)

不幸的是,反序列化产生的结果不是它看起来的样子:在反序列化之后,Multimap在ArrayList中包含一个用于键值的ArrayList,而不是包含值的键的单个ArrayList.

由于put()MultiMap实现了Map接口,因此调用多映射的方法来添加在json字符串中找到的数组,从而产生了这个结果.

如果将新值放入非现有键,MultiMap实现本身将再次创建一个ArrayList.

有没有办法绕过这个?

谢谢您的帮助!

java serialization json multimap

10
推荐指数
1
解决办法
6584
查看次数