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 流的漂亮和更优雅的方法来做到这一点?
非常感谢
你可以这样做:
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从实例产生实例AcollectHashSet<B>从流中产生最终结果。请注意,这意味着B'shashCode和equal已正确实现,这是您必须做的才能使用Bwith HashSet<B>。