Собрать поток в 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 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();
}
}
Я отредактирую вопрос и укажу артефакты, если они не очевидны (я предполагаю, что Apache Commons Collections, JUnit, AssertJ широко распространены в проектах Java).
Java 8.>

Подробнее здесь: https://stackoverflow.com/questions/798 ... ivaluedmap
Ответить

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

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

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

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

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