Поскольку Collector — это сложный интерфейс, я не в восторге от его реализации вручную.
Код: Выделить всё
class HierarchicalItem {
private String id;
private String parentId;
// canonical constructor, getters
}
Код: Выделить всё
import org.apache.commons.collections4.MultiMapUtils;
import org.apache.commons.collections4.MultiValuedMap;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import java.util.Arrays;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
@Disabled
public class GenericTest {
@Test
void testSomething() {
List items = Arrays.asList(
new HierarchicalItem("1", null),
new HierarchicalItem("a", "1"),
new HierarchicalItem("b", "1"),
new HierarchicalItem("2", null),
new HierarchicalItem("3", null),
new HierarchicalItem("c", "3")
);
MultiValuedMap parentIdsToChildrenIds = toParentChildrenMap(items);
assertThat(parentIdsToChildrenIds.get("1")).containsExactly("a", "b");
assertThat(parentIdsToChildrenIds.get("2")).isEmpty();
assertThat(parentIdsToChildrenIds.get("3")).containsExactly("c");
}
private MultiValuedMap toParentChildrenMap(List items) {
// your implementation goes here
return MultiMapUtils.newListValuedHashMap();
}
}
Java 8.>
Подробнее здесь: https://stackoverflow.com/questions/798 ... ivaluedmap
Мобильная версия