Собрать поток в MultiValuedMapJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Собрать поток в MultiValuedMap

Сообщение Anonymous »

Каков наиболее краткий способ собрать поток иерархических элементов данных в org.apache.commons.collections4.MultiValuedMap?
Поскольку 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 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

Подробнее здесь: [url]https://stackoverflow.com/questions/79802892/collect-stream-into-multivaluedmap[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»