使用flatMap处理Java中的嵌套集合

港控/mmm° 2022-11-15 11:42 198阅读 0赞

1.嵌套集合的示例

  1. List<List<String>> nestedList = asList(
  2. asList("one:one"),
  3. asList("two:one", "two:two", "two:three"),
  4. asList("three:one", "three:two", "three:three", "three:four"));

2.使用forEach整合列表

为了将这个嵌套的集合展平为字符串列表,可以将forEach与Java 8方法参考结合使用:

  1. public <T> List<T> flattenListOfListsImperatively(
  2. List<List<T>> nestedList) {
  3. List<T> ls = new ArrayList<>();
  4. nestedList.forEach(ls::addAll);
  5. return ls;
  6. }
  7. @Test
  8. public void test7() {
  9. List<String> ls = flattenListOfListsImperatively(nestedList);
  10. assertNotNull(ls);
  11. assertTrue(ls.size() == 8);
  12. assertThat(ls, IsIterableContainingInOrder.contains(
  13. "one:one",
  14. "two:one", "two:two", "two:three", "three:one",
  15. "three:two", "three:three", "three:four"));
  16. }

3.使用flatMap展平列表

可以利用Stream API中的flatMap方法展平嵌套列表。

可以展平嵌套的Stream结构,并最终将所有元素收集到一个特定的集合中:

  1. public <T> List<T> flattenListOfListsStream(List<List<T>> list) {
  2. return list.stream()
  3. .flatMap(Collection::stream)
  4. .collect(Collectors.toList());
  5. }
  6. @Test
  7. public void test8() {
  8. List<String> ls = flattenListOfListsStream(nestedList);
  9. System.out.println(ls);
  10. assertNotNull(ls);
  11. assertTrue(ls.size() == 8);
  12. }

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,198人围观)

还没有评论,来说两句吧...

相关阅读