@Override public List<E> getChildItems(GroupInfo groupId) { if (groupItems == null) { return Collections.emptyList(); } if (containsGroup(groupId)) { List<E> entities = new ArrayList<>(); // if current group contains other groups if (hasChildren(groupId)) { List<GroupInfo> children = getChildrenInternal(groupId); for (GroupInfo childGroup : children) { entities.addAll(getChildItems(childGroup)); } } for (K id : groupItems.getOrDefault(groupId, Collections.emptyList())) { E item = container.getItem(id); entities.add(item); } return entities; } return Collections.emptyList(); }