Сглаживание вложенных коллекций в Java
1. обзор
В этой быстрой статье мы рассмотрим, как сгладить вложенную коллекцию в Java.
2. Пример вложенной коллекции
Предположим, у нас есть список списков типаString.
List> nestedList = asList(
asList("one:one"),
asList("two:one", "two:two", "two:three"),
asList("three:one", "three:two", "three:three", "three:four"));
3. СглаживаниеList с помощью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. СглаживаниеList с помощьюflatMap
Мы также можем сгладить вложенный список, используя методflatMap из APIStream.
Это позволяет нам сгладить вложенную структуруStream и в конечном итоге собрать все элементы в конкретную коллекцию:
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 or flatMap в Java 8 в сочетании со ссылками на методы могут использоваться для сглаживания вложенных коллекций.
Вы можете найти код, обсуждаемый в этой статьеover on GitHub.