Рубрики
Без рубрики

Flattening Вложенные коллекции на Java

Узнайте быстро, как сгладить вложенную коллекцию на Java.

Автор оригинала: Zeger Hendrikse.

1. Обзор

В этой быстрой статье мы изумим, как сгладить вложенную коллекцию в Java.

2. Пример не nested коллекции

Предположим, у нас есть список списков типов Струнные .

List> nestedList = asList(
  asList("one:one"), 
  asList("two:one", "two:two", "two:three"), 
  asList("three:one", "three:two", "three:three", "three:four"));

3. Выравнивание списка с forEach

Для того, чтобы сгладить эту вложенную коллекцию в список строк, мы можем использовать forEach вместе со ссылкой на метод Java 8:

public  List flattenListOfListsImperatively(
    List> nestedList) {
    List ls = new ArrayList<>();
    nestedList.forEach(ls::addAll);
    return ls;
}

И здесь вы можете увидеть метод в действии:

@Test
public void givenNestedList_thenFlattenImperatively() {
    List ls = flattenListOfListsImperatively(nestedList);
    
    assertNotNull(ls);
    assertTrue(ls.size() == 8);
    assertThat(ls, IsIterableContainingInOrder.contains(
      "one:one",
      "two:one", "two:two", "two:three", "three:one",
      "three:two", "three:three", "three:four"));
}

4. Уплощение списка с flatMap

Мы также можем сгладить вложенный список, используя flatMap метод из Поток API.

Это позволяет сгладить вложенные Поток структуры и в конечном итоге собрать все элементы для конкретной коллекции:

public  List flattenListOfListsStream(List> list) {
    return list.stream()
      .flatMap(Collection::stream)
      .collect(Collectors.toList());    
}

И вот логика в действии:

@Test
public void givenNestedList_thenFlattenFunctionally() {
    List ls = flattenListOfListsStream(nestedList);
    
    assertNotNull(ls);
    assertTrue(ls.size() == 8);
}

5. Заключение

Простая forEach или flatMap методы Java 8 в сочетании со ссылками на методы могут быть использованы для выравнивания вложенных коллекций.

Вы можете найти код, обсуждаемый в этой статье более на GitHub .