Sammeln Sie Stream in MultiValuedMapJava

Java-Forum
Anonymous
 Sammeln Sie Stream in MultiValuedMap

Post by Anonymous »

Was ist die prägnanteste Möglichkeit, einen Stream hierarchischer Datenelemente in einer org.apache.commons.collections4.MultiValuedMap zu sammeln?
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

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post