拼合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上找到本文討論的代碼。
0 條評論,你可以發表評論,我們會進行改進
