Вот объект вызова пн. Он имеет два атрибута, начало и конец, оба являются String. Конечный атрибут может содержать «;»вот так
Mon m1 = new Mon(); m1.setStart("A"); m1.setEnd("a;b");
Mon m2 = new Mon(); m2.setStart("A"); m2.setEnd("b");
Mon m3 = new Mon(); m3.setStart("C"); m3.setEnd("c");
Mon m4 = new Mon(); m4.setStart("A"); m4.setEnd("c");
А вот ArrayList.
List<Mon> list = new ArrayList();
list.add(m1);list.add(m2);list.add(m3);list.add(m4);
Теперь я хочу сгруппировать список по начальному attr и конечному attr, но база на конце содержит ";", поэтому я также хочу поместить m1 и m2 в одну группу, потому что m1.end содержит m2.end, но m4 находится в другой группе, так как начало и конец m4 не совпадает с m1, m2.
Я пытался использовать Collectors.groupingBy для группировки по началу
Map<String, List<Mon>> map = list.stream().collect(Collectors.groupingBy(d -> d.getStart()));
Но это не тот результат, который мне нужен. Вывод такой:
key: Aa;b OR Ab , value: m1, m2
key: Cc, value: m3
key: Ac, value: m4
Есть ли способреализовать это, также функция потока JDK8 лучше
Большое спасибо