Da Collector eine knifflige Schnittstelle ist, suche ich nach Möglichkeiten, seine direkte manuelle Implementierung zu vermeiden. z.B. mit einigen Dienstprogrammen, die mir nicht bekannt sind.
Code: Select all
class HierarchicalItem {
private String id;
private String parentId;
// canonical constructor, getters
}
Code: Select all
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 parentsToChildren = items.stream().collect(toMultiValueMapCollector());
assertThat(parentIdsToChildrenIds.get("1")).containsExactly("a", "b");
assertThat(parentIdsToChildrenIds.get("2")).isEmpty();
assertThat(parentIdsToChildrenIds.get("3")).containsExactly("c");
}
private static Collector
Mobile version