【问题标题】:Traverse through linked objects遍历链接对象
【发布时间】:2021-11-21 18:46:38
【问题描述】:

我有这个对象,其中每个 Rule 存储一个规则列表:

public class Rule {

    private String name;
    private String condition;
    private List<String> result;
    private List<Rule> rules;
    private Map<String, List<String>> aliases = Maps.newHashMap();
    private boolean last = false;

}

遍历所有链接对象并将所有“结果”字段插入列表中的最聪明和最有效的方法是什么,无论它们来自哪个对象?最终我想要一份清单:

List&lt;String&gt; results 包含所有对象的所有结果。

我已经尝试了几个小时,非常感谢您的帮助。获取所有对象本身的列表也会对我有所帮助,例如压平树。

【问题讨论】:

  • 结果可以包含自引用吗?
  • 不,他们没有

标签: java json tree traversal


【解决方案1】:

你可以使用流

这是我将规则列表映射到结果流的递归版本

  private Stream<String> mapToRules(List<Rule> rules) {
    return Stream.concat(rules.stream()
            .map(Rule::getResult)
            .flatMap(List::stream),
        rules.stream()
            .map(Rule::getRules)
            .flatMap(this::mapToRules));
  }

单根版本

  private Stream<String> mapToRules(Rule rule) {
    return Stream.concat(rule
            .getResult()
            .stream(),
        rule.getRules()
            .stream()
            .flatMap(this::mapToRules));
  }

然后您可以将此流收集到列表中

mapToRules(list).collect(Collectors.toList());

【讨论】:

  • 谢谢,我有一个根规则,我是否将属于这个根的规则的初始列表作为初始列表转移?因为它不起作用:(
  • 你可以使用mapToRules(List.of(root))
  • 完美!刚刚添加了空检查,它起作用了!非常感谢
猜你喜欢
  • 2013-10-19
  • 1970-01-01
  • 1970-01-01
  • 2018-07-15
  • 2015-01-11
  • 2017-12-17
相关资源
最近更新 更多