protected GroupInfo<MetaPropertyPath> groupItems(int propertyIndex, GroupInfo parent, List<GroupInfo> children, E item, LinkedMap<MetaPropertyPath, Object> groupValues) { MetaPropertyPath property = (MetaPropertyPath) groupProperties[propertyIndex++]; Object itemValue = getValueByProperty(item, property); groupValues.put(property, itemValue); GroupInfo<MetaPropertyPath> groupInfo = new GroupInfo<>(groupValues); itemGroups.put(item.getId(), groupInfo); if (!parents.containsKey(groupInfo)) { parents.put(groupInfo, parent); } if (!children.contains(groupInfo)) { children.add(groupInfo); } List<GroupInfo> groupChildren = this.children.computeIfAbsent(groupInfo, k -> new ArrayList<>()); if (propertyIndex < groupProperties.length) { groupInfo = groupItems(propertyIndex, groupInfo, groupChildren, item, groupValues); } return groupInfo; }
protected GroupInfo<MetaPropertyPath> groupItems(int propertyIndex, GroupInfo parent, List<GroupInfo> children, T item, LinkedMap<MetaPropertyPath, Object> groupValues) { MetaPropertyPath property = (MetaPropertyPath) groupProperties[propertyIndex++]; Object itemValue = getValueByProperty(item, property); groupValues.put(property, itemValue); GroupInfo<MetaPropertyPath> groupInfo = new GroupInfo<>(groupValues); itemGroups.put(item.getId(), groupInfo); if (!parents.containsKey(groupInfo)) { parents.put(groupInfo, parent); } if (!children.contains(groupInfo)) { children.add(groupInfo); } List<GroupInfo> groupChildren = this.children.computeIfAbsent(groupInfo, k -> new ArrayList<>()); if (propertyIndex < groupProperties.length) { groupInfo = groupItems(propertyIndex, groupInfo, groupChildren, item, groupValues); } return groupInfo; }