Если вы ищете исходный список для группировки в Карту Карт. Ниже приведен фрагмент кода
List<FullCalendarDTO> arrayList = new ArrayList<FullCalendarDTO>();
arrayList.add(new FullCalendarDTO("US","A"));
arrayList.add(new FullCalendarDTO("EU","A"));
arrayList.add(new FullCalendarDTO("EU","A"));
arrayList.add(new FullCalendarDTO("US","A"));
arrayList.add(new FullCalendarDTO("US","B"));
Map<String, List<FullCalendarDTO>> result = arrayList.stream().collect(Collectors.groupingBy(FullCalendarDTO::getNameOfCountryOrRegion));
HashMap<String, Map<String, List<FullCalendarDTO>>> finalOutput = new HashMap<String, Map<String, List<FullCalendarDTO>>>();
for (Entry<String, List<FullCalendarDTO>> fullCalendarDTO : result.entrySet()) {
Map<String, List<FullCalendarDTO>> collect = fullCalendarDTO.getValue().stream().collect(Collectors.groupingBy(FullCalendarDTO::getLeagueDTO));
finalOutput.put(fullCalendarDTO.getKey(), collect);
}
System.out.println(finalOutput);
, который выводит
{EU = {A = [EU :: A, EU :: A]}, US = {A = [US :: A, US :: A], B = [US :: B]}}
[ ]
имеет более высокий приоритет, чем//(и "//" на самом деле только сокращение, не оператор). Это так, потому что согласно спецификации XPath 1.0,
"//коротко для/descendant-or-self:: узел () /"
и позже:
"ПРИМЕЧАНИЕ: путь местоположения//para1 не означает то же как путь местоположения / потомок:: para1. Последние выборы первый порожденный элемент параграфа; первый выбирает все порожденные элементы параграфа, которые являются первыми детьми параграфа их родителей".
Поэтому выражение XPath:
//element[@name='same'][2]
средства:
Выберите любой элемент в документе, который называют "элементом", имеет атрибут "имя" со значением "то же", и этот элемент является вторым такой ребенок своего родителя.
То, что Вы хотите:
(//element[@name='same'])[2]
Отметьте скобки, которые переопределяют более высокий приоритет [].
Точно так же предпоследнее такой узел выбрано следующим выражением XPath:
(//element[@name='same'])[last()-1]
Наконец, необходимое предупреждение: использование "//" сокращение является очень дорогим, поскольку оно заставляет целое (sub) дерево быть пересеченным. Каждый раз, когда структура документа известна, рекомендуется использовать более определенные конструкции (пути местоположения).