如何使用 java 8 流将 HashSet 合并为一个有限制的集合?

use*_*966 4 java hashset java-8 java-stream

我有2个班级:

class A
{
 int x;
 String y;
}

class B
{
 int x;
}
Run Code Online (Sandbox Code Playgroud)

我的 2 个 hashSet 来自类型 A,我想hashSet在映射时将它们合并为类型 B 中的一个A.x to B.x

我认为的方法是迭代它们,创建新对象并只复制 Ax 的值想知道是否有一种使用 java 8 流的漂亮和更优雅的方法来做到这一点?

非常感谢

das*_*ght 5

你可以这样做:

HashSet<B> hb = Stream.concat(ha1.stream(), ha2.stream())
    .map(a -> new B(a.x))
    .collect(Collectors.toCollection(HashSet::new));
Run Code Online (Sandbox Code Playgroud)

这是它的工作原理:

  • Stream.concat连接第一个和第二个HashSet<A>s 中的项目
  • mapB从实例产生实例A
  • collectHashSet<B>从流中产生最终结果。

请注意,这意味着B'shashCodeequal已正确实现,这是您必须做的才能使用Bwith HashSet<B>

演示。