2016-12-05 4 views
3

私は2クラスありますJava 8ストリーミングを使用してHashSetsを制限付きでマージする方法はありますか?

class A 
{ 
int x; 
String y; 
} 

class B 
{ 
int x; 
} 

私の2 hashSetsはタイプAからのものであり、私は思っA.x to B.x

道をマッピングするときにタイプBから1 hashSetにマージしたいそれらの両方を反復することであるが、新しいオブジェクトを作成し、Axの値をコピーするだけですJava 8のストリーミングを使用してそれを行うには、よりエレガントな方法があるかどうか疑問に思っていた?

どうもありがとう

+0

ですから、AセットとBセットを持っていて、AさんとBさんの両方を含む1セットをしたいが、「x」が同じである場合、重複があります - かかわらずだ場合のAまたはB? – BretC

+0

はい、複製されていればOKです – user1386966

答えて

4

あなたはこのようにそれを行うことができます。ここでは

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

が、これがどのように動作するかです:

  • Stream.concatは、第1および第2のHashSet<A>
  • からアイテムを連結します
  • mapは、0のインスタンスからBのインスタンスを生成します。
  • collectは、ストリームから最後のHashSet<B>を生成する。

これはBhashCodeequalが正しくとにかくHashSet<B>Bを使用するために何をしなければならないかである、実装されていることを意味することに注意してください。

Demo.

+0

...でも釘付け!あなたは私よりも速かった! –

+0

すごく感謝します! – user1386966

関連する問題