拼合Java中的嵌套集合

1.概述

在這篇快速的文章中,我們將探討如何在Java中展平嵌套的集合。

2.嵌套集合的示例

假設我們有一個String類型的列表列表。

List<List<String>> 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 <T> List<T> flattenListOfListsImperatively(

 List<List<T>> nestedList) {

 List<T> ls = new ArrayList<>();

 nestedList.forEach(ls::addAll);

 return ls;

 }

在這裡,您可以看到正在使用的方法:

@Test

 public void givenNestedList_thenFlattenImperatively() {

 List<String> 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展列表

我們還可以通過使用Stream API中的flatMap方法來展平嵌套列表。

這使我們可以展平嵌套的Stream結構,並最終將所有元素收集到特定集合中:

public <T> List<T> flattenListOfListsStream(List<List<T>> list) {

 return list.stream()

 .flatMap(Collection::stream)

 .collect(Collectors.toList());

 }

這是實際的邏輯:

@Test

 public void givenNestedList_thenFlattenFunctionally() {

 List<String> ls = flattenListOfListsStream(nestedList);



 assertNotNull(ls);

 assertTrue(ls.size() == 8);

 }

5.結論

Java 8中簡單的forEach或flatMap方法與方法引用結合使用,可以使嵌套集合變平坦。

您可以在GitHub上找到本文討論的代碼。