【问题标题】:How to convert nested for loop to stream in Java [duplicate]如何在Java中将嵌套的for循环转换为流[重复]
【发布时间】:2021-01-04 09:38:14
【问题描述】:

我正在尝试使用 Java 8 Stream 重构以下代码。

如何过滤标签包含“Season1”的问题。

public List<GHIssue> getFirstSeasonIssues() throws IOException {
    List<GHIssue> firstSeasonIssues = new ArrayList<>();
    List<GHIssue> issues = repository.getIssues(GHIssueState.ALL);

    for (GHIssue issue : issues) {
        Collection<GHLabel> labels = issue.getLabels();
        for (GHLabel label : labels) {
            if (label.getName().equals("Season1")) {
                firstSeasonIssues.add(issue);
            }
        }
    }
    return firstSeasonIssues;
}

【问题讨论】:

    标签: java loops java-stream


    【解决方案1】:

    您可以使用filteranyMatch 来定位具有匹配标签的所有问题。

    List<GHIssue> firstSeasonIssues =
        issues.stream()
               .filter(i -> i.getLabels().stream().anyMatch(l -> l.getName().equals("Season1")))
               .collect(Collectors.toList());
    

    请注意,这会将具有匹配标签的每个问题添加一次到输出List

    如果同一问题多次出现“Season1”标签,您的原始循环可能会多次将同一问题添加到输出List,但我相信您不想多次添加相同的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-06
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多