如何使用该对象持有的引用列表到自己的Java流打印嵌套列表

Rosa14:

我有一个对象,它类似于以下清单所示:

public class Obj {
  private List<Obj> objs;
  private String objId;

  public List<Obj> getObjs() {
    return objs;
  }

  public String getobjId() {
    return objId;
  }

  @Override
  public String toString() {
    return "Obj [objs=" + objs + ", objId=" + objId + "]";
  }

}

如何打印列表中objId使用流?

编辑

Obj可以包含obj的一个列表,它的孩子可以包含OBJ对象的列表。如果深度为5级,是有可能从最顶端的obj在5级的孩子的价值观打印所有的objid值。我想避免嵌套的for循环。

费德里科·佩拉尔塔夏弗纳:

您应该使用递归。一种可能的方式与流做如下:

private Stream<Obj> allObjs() {
    return Stream.concat(
        Stream.of(this), 
        objs == null ? Stream.empty() : objs.stream().flatMap(Obj::allObjs));
}

@Override
public String toString() {
    return allObjs()
        .map(Obj::getobjId)
        .collect(Collectors.joining(", "));
}

请注意,这个只要你工作得很好Obj实例被安排在一个树形结构。如果你有一个具体的Obj实例,它是一个既在一定程度上家长和一些较低级别的子(即如果你的Obj情况下形成一个图),该解决方案将无法工作,你会得到一个巨大的StackOverflowError


如果您不能修改Obj类,你可以实现与接收的一个实例helper方法相同Obj的,即ObjService类:

public static Stream<Obj> allObjs(Obj o) {
    if (o == null) return Stream.empty(); // in case the argument is null
    return Stream.concat(
            Stream.of(o), 
            o.getObjs() == null ?
                Stream.empty() :
                o.getObjs().stream().flatMap(ObjService::allObjs));
}

public static String deepToString(Obj o) {
    return ObjService.allObjs(o)
        .map(Obj::getobjId)
        .collect(Collectors.joining(", "));
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用流将嵌套对象列表转换为具有相似信息的对象列表

如何从使用Java流对象列表的设置

如何使用嵌套循环打印嵌套列表?

如何使用 Java 流计算列表中的嵌套集合

如何创建使用具有使用Java流性质不同的对象列表中不同对象的列表

如何转换列表<对象[]>到流<OBJECT>

使用Java流打印列表项

总结使用Java API流嵌套列表

如何在嵌套的领域列表中创建新对象?父对象应保持不变,但必须将其“持有”的列表添加到

如何使用Lambda流迭代嵌套列表?

Java的8:如何流列表到列表的列表?

如何基于键值项列表更新现有的嵌套对象属性

如何使用带有对象列表的 java 8 流获取一些统计信息

Java流对象列表

如何使用 Javascript 打印地图的嵌套列表

如何获得对boost :: any持有的数据的const引用?

如何使用 linq 查询带有嵌套列表的对象?

在Python中:如果仅在列表中引用对象,如何从该列表中删除该对象?

如何使用 JAXB 解析 Java 中嵌套的 XML 对象列表?

使用Java流的复杂对象组列表

如何使用 Automapper 或 LINQ 将具有嵌套列表的对象映射到对象列表?

如何使用Java流制作列表元素的所有变体?

持有对自己的引用时,如何调用变异方法?

如何使列表项值不引用该对象

如何使用lambdas /流将对象的嵌套列表转换为地图(Map <Integer,Map <Integer,Object >>)

如何使用Java流将多个列表收集到一个列表中?

如何获取列表列表与Java流对象

如何在python中打印具有最高总和的嵌套对象列表

如何遍历嵌套的 java 对象列表?