遍历链接对象

Traverse through linked objects

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

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<String> results 包含所有对象的所有结果。

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

您可以使用流

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

  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());