一个java集合的问题

有个地点类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集合。提前感谢大侠!

阅读 1.8k
3 个回答

什么情况下要这么做?是从数据库取出来的数据吗?数据非常大?内存不够用?如果想把整个Set放到Map里,就楼上的loop就行。我假设你数据很大,不想浪费内存,所有数据都cache在内存里,很少用到按照name取地点。不用Set,用List,然后按照name Collections.sort一下List,根据name取的话用Collections.binarySearch。

对set进行iterator遍历,可以得到每一个place对象,然后map.put(place.getName, place),就可以了。

你这个是分组, 如果你学过Java8,那么用stream来处理贼简单,set.stream().collect(Collectors.groupingBy(new Function(){}));
如果你不知道Java8 ,下面的文章能帮到你。https://www.oschina.net/quest...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题