我试图从JAVA中的多映射(org.apache.commons.collections.MultiMap)中删除一个值

我试图从JAVA中的多映射(org.apache.commons.collections.MultiMap)中删除一个值,java,collections,graph,hashmap,Java,Collections,Graph,Hashmap,我试图从Java中的多映射(org.apache.commons.collections.MultiMap)中删除一个值。问题是它包含两个值。当我移除一个时,另一个也会移除 class MappedValue { public MappedValue(String id , boolean touched) { identifier = id; this.touched=touched; } private String identifier; priva

我试图从Java中的多映射(org.apache.commons.collections.MultiMap)中删除一个值。问题是它包含两个值。当我移除一个时,另一个也会移除

class MappedValue
{
  public MappedValue(String id , boolean touched) {
    identifier = id;
    this.touched=touched;
  }

  private String  identifier;  
  private boolean touched; 
}   

MultiMap SuccessorsArray = new MultiValueMap();   

MappedValue mv = new MappedValue("1", false);
MappedValue mv2 = new MappedValue("2", true);

SuccessorsArray.put("key1", mv );         
SuccessorsArray.put("key1", mv2 );      
//Below is the problem as both values in the get removed instead of 1(mv).
SuccessorsArray.remove("key1", mv);
请试试这个

MultiValueMap SuccessorsArray = new MultiValueMap(); 
而不是

MultiMap SuccessorsArray = new MultiValueMap();
我用
commons集合的
3.2.1
版本测试了它,它运行正常


顺便说一句,您不应该将地图命名为
SuccessorsArray
,而应该命名为
SuccessorsArray

我刚刚用3.2.1版本和

public static void main(String[] args) {
    class MappedValue {
        public MappedValue(String id, boolean touched) {
            identifier = id;
            this.touched = touched;
        }
        private String identifier;
        private boolean touched;
        @Override
        public String toString() {
            return "MappedValue [identifier=" + identifier + ", touched=" + touched + "]";
        }
    }

    MultiMap multiMap = new MultiValueMap();
    MappedValue mv = new MappedValue("1", false);
    MappedValue mv2 = new MappedValue("2", true);
    multiMap.put("key1", mv);
    multiMap.put("key1", mv2);
    //Below is the problem as both values in the get removed instead of 1(mv).
    multiMap.remove("key1", mv);
    System.out.println(multiMap.get("key1"));
}
返回
[MappedValue[identifier=2,toucted=true]


因此,该值确实没有被删除。

为什么不单独使用键删除呢。e、 g SuccessorsArray.remove(“key1”);他不想同时删除这两个键/值。他想删除
“key1”/mv
并保留
“key1”/mv2
。可能最好使用Guava的Multimap,它实际上是有效的:)@Tom它在版本4中有泛型;)@罗姆弗雷特:好听。但我还是推荐番石榴:D.removeMapping(“key1”,mv);不幸的是,这不起作用。它实际上不是对象可用的方法…@Walker我不明白您为什么将另一个答案标记为已接受,但无论如何,不客气。@refret,您的输出表明这是我想要的。顺便说一下,我刚升级到版本4。再次感谢分享。