【问题标题】:Nested collections lambda iteration嵌套集合 lambda 迭代
【发布时间】:2017-05-15 14:09:37
【问题描述】:

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

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

命令式的方法很简单,但有没有办法对这一切进行 lambda-fy?

今天的代码如下所示:

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)

但是我可以做更多吗?

【问题讨论】:

    标签: java lambda java-8


    【解决方案1】:

    flatMap 可用于此目的。你在这里得到的是对各种最深集合的所有元素的迭代,就好像它们是一个集合一样:

    o.getList().stream()
        .flatMap(c1 -> c1.getSet().stream())
        .flatMap(c2 -> c2.getFoo().stream())
        .forEach(x -> x.setSecretValue(computedThingy));
    

    【讨论】:

      【解决方案2】:

      flatMap 救援,一个简单的例子,一个嵌套的字符串集合

      另请参阅: Java 8 Streams FlatMap method example

      Turn a List of Lists into a List Using 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-10-22
        • 1970-01-01
        • 1970-01-01
        • 2015-05-26
        • 2013-10-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多