2016-05-05 2 views
1

私は1クラスの繰り返し可能性を持っています:Iterable<ClassA> classAIterable。私はclassAIterable内のすべてのClassAオブジェクトを取得し、ClassAオブジェクトが含まれているとClassBの反復可能にそれらを置くClassBオブジェクトにそれを回すしたい1つのクラスのIterableを別のクラスのIterableに変換するにはどうすればよいですか?

public class ClassB { 
    private final ClassA classA; 
    public ClassB(ClassA a) { 
     this.classA = a; 
    } 
} 

:私はこのような第二のクラスを持っています。

どうすればよいですか?ありがとう!

答えて

1

IterableSpliteratorStreamSupport.streamでアクセスしてStreamに変換できます。 Streamでは、要素をClassAからClassBにマップし、ListIterable)に集めることができます。もちろん

Iterable<ClassB> iterB = StreamSupport.stream(iterable.spliterator(), false) 
    .map(ClassB::new) 
    .collect(Collectors.toList()); 
+0

のために働くかもしれないが、どのように私は、中のものを渡すのですか? –

+0

コンストラクタ参照の代わりにラムダ式を使用することができます。 'a - >新しいClassB(a、other、args)' – rgettman

+0

すごくうれしい、ありがとう! –

0

それはあなたのケースでは適切ではないかもしれませんが、解決策の変種として:

1)Uインターフェイスを作成することができます

interface interfaceC { 
    } 

2)の両方でそれを実装その後、

class ClassA implements interfaceC {   
    } 

class ClassB implements interfaceC {   
    } 

3)そして、の反復可能なを使用します。ClassAClassB私の `ClassB`コンストラクタは複数の引数を取る場合

class classIterable implements Iterable<interfaceC> { 
     private List<interfaceC> internalList = null; 
    } 

をu

関連する問題