首页 新闻 会员 周边 捐助

一个java集合的问题

0
悬赏园豆:15 [已解决问题] 解决于 2018-05-02 21:36

有个地点类Place,其构造函数为Place(String name, Position p,  String description), 其中坐标Position类的构造函数为Position(int x, int y)

现在有一个存有Place对象的集合HashSet<Place> places=new HashSet<>(); 由于一个名字name可能对应多个不同Place对象,为了方便按地名查询,得到此相同名字的各个地点,想把地点按照同名排列,就是把地点对象组织成一个map: Map<String, Set<Place>> map=new HashMap<>()里。请问如何从已有的集合places得到map?其中mapkey为字符串,是地点的名字,value为有对应名字的PlaceSet集合。提前感谢大侠!

jinleiDev的主页 jinleiDev | 初学一级 | 园豆:142
提问于:2018-05-02 06:45
< >
分享
最佳答案
1

package com;

import lombok.Data;
import javax.swing.text.Position;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class Demo {
@Data
public static class Place {
private String name;
private Position p;
private String description;

public Place(String name, Position p, String description){
this.name = name;
this.p = p;
this.description =description;
}
}

public static void main(String[] args){
HashSet<Place> places=new HashSet();
places.add(new Place("a1", null, "ss1"));
places.add(new Place("a2", null, "ss2"));

Map<String, Set<Place>> map=new HashMap();
for(Place p : places){
if(map.containsKey(p.getName())){
map.get(p.getName()).add(p);
}else{
HashSet<Place> st = new HashSet();
st.add(p);

map.put(p.getName(), st);
}
}

for(String k: map.keySet()){
System.out.print(k);
for(Place p : map.get(k)) {
System.out.print(" ");
System.out.print(p.getDescription());
}

System.out.println();
}
}
}

收获园豆:15
2012 | 高人七级 |园豆:21645 | 2018-05-02 08:35

import org.apache.commons.lang3.builder.ToStringBuilder;


public static class Place {
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}

或者你重写Place的toString,这样打印对象时就很简单了

for(Place p : map.get(k)) {
System.out.print(p);
}

2012 | 园豆:21645 (高人七级) | 2018-05-02 08:47
其他回答(2)
0

遍历set根据name判断map中是否已存在set,存在就在value中add,不存在就新建一个set,add后作为value

小光 | 园豆:1766 (小虾三级) | 2018-05-02 10:12
0

嗯,这个可以作为一个面试题,考察基础编码的能力。

西漠以西 | 园豆:1675 (小虾三级) | 2018-05-02 10:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册