2017-12-13 24 views
-1

workspaceprojectインスタンスオブジェクトは、Listオブジェクトを保持するRallyオブジェクトに関連付けられています。別のHashMapworkspaceidprojectidを取得する方法をJava 8 - Streamオブジェクトからjava.util.Mapに変換

class Rally { 
    Workspace workspace; 

    public Workspace getWorkspace() { 
     return workspace; 
    } 

    public void setWorkspace(Workspace workspace) { 
     this.workspace = workspace; 
    } 

    public Project getProject() { 
     return project; 
    } 

    public void setProject(Project project) { 
     this.project = project; 
    } 

    Project project; 

    Rally(String name, Workspace workspace, Project project) { 
     this.workspace = workspace; 
     this.project = project; 

    } 
} 

class Workspace { 

    public Workspace(String id) { 
     this.id = id; 
    } 

    private String id; 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 
} 

class Project { 
    private String id; 

    public Project(String id) { 
     super(); 
     this.id = id; 
    } 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

} 

rallyInList.stream().collect(Collectors.toMap(r->r.getWorkspace().getId(),b->b.getProject().getId())); 

enter image description here

+0

1)コードを書式設定してください。これはやや判読できません.2)発生しているエラーを投稿してください。 –

+0

http://idownvotedbecau.se/itsnotworking/ –

答えて

1

あなたのストリームパイプラインは基本的に正しいです。

結果をMapに割り当てるだけです。 getId()方法はStringを返すと仮定:

Map<String,String> map = 
    rallyInList.stream() 
      .collect(Collectors.toMap(r->r.getWorkspace().getId(), 
             r->r.getProject().getId(), 
             (v1,v2)->v2)); 

また、あなたが実際に(例えば、それはgetId()、ないgetID()でなければなりません)が存在し使用しているすべての方法を確認してください。

EDIT:

ランタイムながら、それが問題を引き起こしています。不正な状態の例外。通常、ハッシュマップに重複キーを追加すると、値だけを許可し更新します。

使用しているCollectors.toMapの亜種では重複キーが許可されていません。マージ機能が必要なバリアントを使用する必要があります。

+0

私は同じことを試みました。しかし、問題は、日食は、自動的にメソッドを設定していない、すなわちです。 r.getWorkspace()は提案されていません。 Map MapはMap の結果が原因で発生しています。何か案が。私はそれが返されていることを知っているString、String –

+0

@LearnHadoopあなたが投稿した 'Rally'クラスには、あなたが追加すべき' getWorkspace() 'と' getProject() 'メソッドがありません。エラーメッセージは誤解を招くことがあります。たとえば、getId()という正しいメソッド名ではなく、 'getID()'を使用したときに 'Map 'エラーメッセージが表示されます。 – Eran

+0

ちょうど私は部分的なコードを掲載しました。下のコードを完了してください。 'クラスラリー{ \tワークスペースワークスペース; \t public Workspace getWorkspace(){ \t \t return workspace; \t} \t公共ボイドsetWorkspace(ワークスペースワークスペース){ \t \t this.workspace =ワークスペース。 \t} \t公開プロジェクトgetProject(){ \t \t return project; \t} \t public void setProject(プロジェクトプロジェクト){ \t \t thisです。プロジェクト=プロジェクト; \t} \tプロジェクトプロジェクト; \tラリー(文字列名、ワークスペース作業領域、プロジェクトプロジェクト){ \t \t this.workspace = workspace; \t \t this.project = project; \t} } ' –

関連する問題