【问题标题】:How to convert Set<Set<String>> to Set<String>?如何将 Set<Set<String>> 转换为 Set<String>?
【发布时间】:2021-02-14 12:31:48
【问题描述】:

假设 Streams 和 Collections 允许使用 Lambdas? 我尝试使用 for 循环,但它没有解决我的问题。

// Set<Set<String>> to Set<String>
for(Set<String> s : set) {
    result.addAll(s);
    set.add(result);
}

set 是 Set&lt;Set&lt;String&gt;&gt; 类型,结果是 Set&lt;String&gt; 类型。

【问题讨论】:

  • 为什么要反复加resultset
  • 你为什么用set.add(result);这个语句
  • 如果你取出set.add(result);,你的代码就是正确的。

标签: java stream set


【解决方案1】:

这是使用 Stream API 的选项:

Set<String> result = sets.stream()
    .flatMap(Collection::stream)
    .collect(Collectors.toSet());

【讨论】:

  • 最好使用flatMap(Set::stream),因为它更具体地表示输入是Set
  • @GauthamM 这是一个品味问题。该方法是在Collection接口中声明的,所以我们不需要知道或关心它是Set还是别的什么。我可能会按照你说的那样做,但我不知道为什么它应该更好或更坏。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-24
  • 1970-01-01
  • 2021-04-26
  • 1970-01-01
  • 2011-08-22
  • 2021-06-22
相关资源
最近更新 更多