当前位置: 首页 > 知识库问答 >
问题:

Java流和List of List of List[副本]

齐航
2023-03-14

由于某些原因,我无法理解如何使用流将这个深度嵌套的列表转换为新的列表。

   every A in List<A> contains -> 
   List<B> where every B contains -> 
   List<C> where every C contains -> List<String>

我尝试了很多不同的迭代,比如:

  List<String> newlist =  listA.getB()
                   .stream()
                   .filter(b -> b.getC()
                   .stream()
                   .filter(c -> c.getPeople)
                   .collect(Collectors.toList())

共有1个答案

晏卓君
2023-03-14

您应该使用flatmap:

List<String> newList =
    listA.stream() // Stream<A>
         .flatMap(a->a.getB().stream()) // Stream<B>
         .flatMap(b->b.getC().stream()) // Stream<C>
         .flatMap(c->c.gtPeople().stream()) // Stream<String>
         .collect(Collectors.toList()); // List<String>
 类似资料:
  • 我得到了同样的错误。这有可能吗?我真的更希望不执行stream.foreach()并传递一个消费者。 编辑:对我来说,不要复制元素是很重要的。

  • 我在Mac上安装了最新的Java8和最新的Android Studio。在Android Studio中我找不到java.util.function。这使我相信它没有使用Java8。我已经搜索了一个日志时间,我的Mac上唯一的Java是Java8。我还检查了项目结构,它指向Java8。我重新安装了Android Studio,创建了一个新项目,但我仍然无法导入java.util.function。

  • 我有一段代码,看起来像这样。 我读到了两个相互矛盾的(?)关于这一点的“规则”。 那是不应有副作用 那是不应更新可变变量(因此,如果我重构以使用foreach并填充结果列表,则会打破这一点),如中所述http://files.zeroturnaround.com/pdf/zt_java8_streams_cheat_sheet.pdf 我如何解决它,以便使用流并仍然返回一个列表,或者干脆跳过流?

  • 假设我有一个实现下面接口的对象列表: 假设我也有一个类,它能够对这些对象进行求和: 我在玩一个自定义收集器,但无法找到一些整洁的解决方案。