Java 8-从流对象转换为Java.util.Map

Java 8-从流对象转换为Java.util.Map,java,java-8,Java,Java 8,workspace和project实例对象与保存在List对象中的Rally对象相关联 class Rally { Workspace workspace; public Workspace getWorkspace() { return workspace; } public void setWorkspace(Workspace workspace) { this.workspace = workspace; }

workspace
project
实例对象与保存在
List
对象中的
Rally
对象相关联

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
id
project
id
获取到另一个
HashMap

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

您的流管道基本上是正确的

您只需将结果分配给
映射
。假设
getId()
方法返回
字符串

Map<String,String> map =
  rallyInList.stream()
             .collect(Collectors.toMap(r->r.getWorkspace().getId(),
                                       r->r.getProject().getId(),
                                       (v1,v2)->v2));
地图=
reallyinlist.stream()
.collect(Collectors.toMap(r->r.getWorkspace().getId(),
r->r.getProject().getId(),
(v1,v2)->v2);
还要确保您使用的所有方法都实际存在(例如,它应该是
getId()
,而不是
getId()

编辑:

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


您正在使用的
collector.toMap
的变体不允许重复密钥。您必须使用需要合并功能的变体。

请1)设置代码格式,这有点难以辨认,2)发布您遇到的完整错误。我也尝试了同样的方法。但问题是eclipse并没有提供自动填充方法,即。r、 GetWorkSpace()不在建议范围内。另一个是Map,Map是由Map引起的,因为结果是Map。任何想法。我知道它正在返回字符串,String@LearnHadoop您发布的
Rally
类缺少您应该添加的
getWorkspace()
getProject()
方法。错误消息有时会产生误导。例如,当我使用
getID()
(正如您在问题中所做的那样)而不是正确的方法名时,我得到了
Map
错误消息,即
getID()
。我只是发布了部分代码。完成下面的代码<代码>类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 Project){this.Project=Project;}Project Project;Rally(字符串名称,Workspace Workspace,Project Project){this.Workspace=Workspace;this.Project=Project;}}@LearnHadoop您应该在问题中发布它(您可以编辑您的问题)。我添加了缺少的getter方法,代码已通过编译。编辑并更新我的代码。希望它能给我一些想法。