我有一组需要处理的HashMap形式的键/值配对数据。需要重新排列HashMap键/值对
这里是对象的我期待在签名:
Map<Consumer, ArrayList<EventMsg>> consumerMsgListMap =
new HashMap<Consumer, ArrayList<EventMsg>>();
的System.out.println(consumerMsgListMap.toString())的结果如下:
ConsumerA = [MSG1,第三型信息的],ConsumerB = [MSG1,MSG2,MSG4],ConsumerC = [MSG2,第三型信息的]
正如你可以看到每个值()是一个列表,而不是一个单独的值。
我需要找出一种重新排列数据的方法,以便每个唯一的 EventMsg条目都有一个关联的消费者。例如:
MSG1需要与[ConsumerA,ConsumerB]
MSG2需要与[ConsumerB,ConsumerC]
Msg3的需要与相关联的相关联的相关联ConsumerA,ConsumerC]
MSG4需要与[ConsumerB]
关联这不是简单地颠倒的K,V的事对。
我认为正确的做法是通过建立一个独立的HashSet拿到唯一的所有值中,但我想不通的值作为单个实体
(如MSG1,消息3得到的一种方式,MSG1,MSG2,MSG4)
而非实体
的基团(例如[MSG1,第三型信息的],[MSG1,MSG2,MSG4])。
这对经验丰富的专业人员来说可能是显而易见的,但在我的发展阶段,我很难过。希望我已经清楚地说明了这个问题。如果有人有任何想法,请提前致谢。
这是初始设置。消费者可以很容易地将字符串和EventMsg可以很容易地整数:
Map<Consumer, ArrayList<EventMsg>> consumerMsgListMap = new HashMap<Consumer, ArrayList<EventMsg>>();
Consumer c1 = new Consumer("ConsumerA");
Consumer c2 = new Consumer("ConsumerB");
Consumer c3 = new Consumer("ConsumerC");
ArrayList<EventMsg> msgListA = new ArrayList<EventMsg>();
msgListA.add(new EventMsg("msg1"));
msgListA.add(new EventMsg("msg3"));
ArrayList<EventMsg> msgListB = new ArrayList<EventMsg>();
msgListB.add(new EventMsg("msg1"));
msgListB.add(new EventMsg("msg2"));
msgListB.add(new EventMsg("msg4"));
ArrayList<EventMsg> msgListC = new ArrayList<EventMsg>();
msgListC.add(new EventMsg("msg2"));
msgListC.add(new EventMsg("msg3"));
consumerMsgListMap.put(c1, msgListA);
consumerMsgListMap.put(c2, msgListB);
consumerMsgListMap.put(c3, msgListC);
这是一个java问题?你在使用哪种语言? – Cratylus 2012-02-03 20:28:45
它看起来像Java。你不能只使用ArrayList.get()来访问单个元素? http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html#get(int) – EdH 2012-02-03 20:32:28
是的 - 对不起,这是Java。 – user1094651 2012-02-03 22:16:08