有个地点类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?其中map的key为字符串,是地点的名字,value为有对应名字的Place的Set集合。提前感谢大侠!
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();
}
}
}
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);
}
遍历set根据name判断map中是否已存在set,存在就在value中add,不存在就新建一个set,add后作为value
嗯,这个可以作为一个面试题,考察基础编码的能力。