У меня есть набор парных данных ключ/значение в виде HashMap, которым я должен манипулировать.
Вот подпись объекта, на который я смотрю:
Map<Consumer, ArrayList<EventMsg>> consumerMsgListMap =
new HashMap<Consumer, ArrayList<EventMsg>>();
Результат System.out.println(consumerMsgListMap.toString()) следующий:
ConsumerA=[msg1, msg3], ConsumerB=[msg1, msg2, msg4], ConsumerC=[msg2, msg3]
Как видите, каждое значение() представляет собой список, а не отдельное значение.
Мне нужно найти способ изменить порядок данных таким образом, чтобы для каждой уникальной записи EventMsg был связан потребитель. Например:
msg1 должен быть связан с [ConsumerA, ConsumerB]
msg2 должен быть связан с [ConsumerB, ConsumerC]
msg3 должен быть связан с [ConsumerA, ConsumerC]
msg4 должен быть связан с [ConsumerB]
Дело не в том, чтобы просто поменять местами пары K, V.
Я думаю, что правильный подход состоит в том, чтобы получить уникальность среди всех значений, создав отдельный HashSet, но я не могу найти способ получить значения как отдельные объекты.
(например, msg1, msg3, msg1, msg2, msg4)
а не как группы сущностей
(например, [msg1, msg3], [msg1, msg2, msg4]).
Это, вероятно, очевидно для опытного профессионала, но на моем этапе развития я в тупике. Надеюсь, я ясно изложил проблему. Заранее спасибо, если у кого есть идеи.
Вот первоначальная настройка. Consumer может так же легко быть String, а EventMsg так же легко может быть Integer:
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);