Java 8 - 从Stream Object转换为java.util.Map

时间:2017-12-13 08:48:26

标签: java java-8

workspaceproject实例对象与Rally对象中的List对象相关联。

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;
    }

}

如何将workspace idproject id转到另一个HashMap

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

enter image description here

1 个答案:

答案 0 :(得分: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())。

编辑:

  

它在运行时导致问题。非法国家例外。通常,如果我们在hashmap中添加重复键,它将仅允许和更新值。

您使用的Collectors.toMap变体不允许重复键。您必须使用需要合并功能的变体。