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

嵌套集合lambda迭代

申自明
2023-03-14

假设我有一个包含集合的对象,所述集合上的每个元素都包含一个集合,每个集合都包含一个集合。

我想在最深的对象上迭代,并对其应用相同的代码。

命令式的方法是微不足道的,但有没有一种方法来完成这一切?

My object o;
SecretType computedThingy = 78;
for (FirstLevelOfCollection coll : o.getList()) {
  for (SecondLevelOfCollection colColl : coll.getSet()) {
    for (MyCoolTinyObjects mcto : colColl.getFoo()) {
      mcto.setSecretValue(computedThingy);
    }
  }
}

我可以看到如何从最深的循环中生成lambda:

colColl.getFoo().stream().forEach(x -> x.setSecretValue(computedThingy)

但我能做得更多吗?

共有1个答案

和弘博
2023-03-14

flatMap到救援的简单示例,具有嵌套的String集合

另请参见:Java 8 Streams FlatMap方法示例

使用Lambdas将列表列表转换为列表

    Set<List<List<String>>> outerMostSet = new HashSet<>();
    List<List<String>> middleList = new ArrayList<>();
    List<String> innerMostList = new ArrayList<>();
    innerMostList.add("foo");
    innerMostList.add("bar");
    middleList.add(innerMostList);

    List<String> anotherInnerMostList = new ArrayList<>();
    anotherInnerMostList.add("another foo");

    middleList.add(anotherInnerMostList);
    outerMostSet.add(middleList);

    outerMostSet.stream()
                .flatMap(mid -> mid.stream())
                .flatMap(inner -> inner.stream())
                .forEach(System.out::println);
foo 
bar 
another foo
 类似资料:
  • 我试图用`stream,特别是嵌套的foreach循环,将以下代码重构为lambda表达式: 我的开头是:

  • 本文向大家介绍Python 语言嵌套集合,包括了Python 语言嵌套集合的使用技巧和注意事项,需要的朋友参考一下 示例 导致: 而是使用frozenset:            

  • 问题内容: 我在Scala和Java之间遇到编译问题。 我的Java代码需要一个 我的scala代码有一个 我收到编译错误: 似乎scala.collection.JavaConversions不适用于嵌套集合,即使Vector可以隐式转换为Iterable。除了遍历scala集合并手动进行转换之外,我还能做些什么使这些类型起作用? 问题答案: 应该弃用恕我直言。您最好使用来明确说明转换的时间和地

  • 我有三个实体主题、主题和类别。在检索包含主题和主题的所有类别时,如何预取每个实体的id和名称列?我不需要其他字段,因为它会影响性能。

  • 下面是我用(FacetModels)填充我的收藏的内容 如何访问可用值[]数组 “FacetModels”:[{“FacetDisplayLabel”:null,“SelectedValues”:[],“AvailableValues”:[],“UnknownResults”:0,“ActionURI”:null,“FacetGroupName”:“Category”,“FacetGroupFri

  • 我正在尝试与Firebase建立聊天- 我将noSQL数据库的结构如下: 我有一个名为Chats的集合,在那个集合中我有文档,文档的名称代表了2个用户之间的关系哈希也存储在我的SQL数据库中,我的想法是我会用这个作为标识符。 在每个文档中,都有一个名为“对话”的集合,其中将包含两个用户之间的所有聊天。 如果我监听的文档在第一个集合“chats”中有一个特定的id,如果我更改了“timestamp”