我们能否找到一个使用流操作的简洁方案来解决这个问题?
  public Map<String, List<Article>> groupByAuthor() {
  return articles.stream()
  .collect(Collectors.groupingBy(Article::getAuthor));
  }
  很好!使用 groupingBy 操作和 getAuthor 方法,我们得到了更简洁、可读性更高的代码。
  现在,我们查找集合中所有不同的标签。
  我们从使用循环的例子开始。
public Set<String> getDistinctTags() {
Set<String> result = new HashSet<>();
for (Article article : articles) {
result.addAll(article.getTags());
}
return result;
}
  好,我们来看看如何使用Stream操作来解决这个问题。
  public Set<String> getDistinctTags() {
  return articles.stream()
  .flatMap(article -> article.getTags().stream())
  .collect(Collectors.toSet());
  }
  棒极了!flatmap 帮我把标签列表转为一个返回流,然后我们使用 collect 去创建一个集合作为返回值。
  一切皆有可能
  以上的是如何使用可读性更高的代码代替循环的例子。务必仔细看看Stream API,因为这篇文章仅仅提到它的一些皮毛而已。
  更新
  收到solarfuse和dhruvgairola的评论后,更新了getDistinctTags()例子,使用集合(Set)作为返回集合。