Автор оригинала: 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:
publicList flattenListOfListsImperatively( List > nestedList) { List
ls = new ArrayList<>(); nestedList.forEach(ls::addAll); return ls; }
И здесь вы можете увидеть метод в действии:
@Test public void givenNestedList_thenFlattenImperatively() { Listls = 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.
Это позволяет сгладить вложенные Поток структуры и в конечном итоге собрать все элементы для конкретной коллекции:
publicList flattenListOfListsStream(List > list) { return list.stream() .flatMap(Collection::stream) .collect(Collectors.toList()); }
И вот логика в действии:
@Test public void givenNestedList_thenFlattenFunctionally() { Listls = flattenListOfListsStream(nestedList); assertNotNull(ls); assertTrue(ls.size() == 8); }
5. Заключение
Простая forEach или flatMap методы Java 8 в сочетании со ссылками на методы могут быть использованы для выравнивания вложенных коллекций.
Вы можете найти код, обсуждаемый в этой статье более на GitHub .