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方法,代码已通过编译。编辑并更新我的代码。希望它能给我一些想法。