在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Java  HTML/ 一個(gè)java集合的問(wèn)題

一個(gè)java集合的問(wèn)題

有個(gè)地點(diǎn)類(lèi)Place,其構(gòu)造函數(shù)為Place(String name, Position p, String description), 其中坐標(biāo)Position類(lèi)的構(gòu)造函數(shù)為Position(int x, int y)。
現(xiàn)在有一個(gè)存有Place對(duì)象的集合HashSet<Place> places=new HashSet<>(); 由于一個(gè)名字name可能對(duì)應(yīng)多個(gè)不同Place對(duì)象,為了方便按地名查詢,得到此相同名字的各個(gè)地點(diǎn),想把地點(diǎn)按照同名排列,就是把地點(diǎn)對(duì)象組織成一個(gè)map: Map<String, Set<Place>> map=new HashMap<>()里。請(qǐng)問(wèn)如何從已有的集合places得到map?其中map的key為字符串,是地點(diǎn)的名字,value為有對(duì)應(yīng)名字的Place的Set集合。提前感謝大俠!

回答
編輯回答
冷溫柔

什么情況下要這么做?是從數(shù)據(jù)庫(kù)取出來(lái)的數(shù)據(jù)嗎?數(shù)據(jù)非常大??jī)?nèi)存不夠用?如果想把整個(gè)Set放到Map里,就樓上的loop就行。我假設(shè)你數(shù)據(jù)很大,不想浪費(fèi)內(nèi)存,所有數(shù)據(jù)都cache在內(nèi)存里,很少用到按照name取地點(diǎn)。不用Set,用List,然后按照name Collections.sort一下List,根據(jù)name取的話用Collections.binarySearch。

2017年7月31日 00:48
編輯回答
愛(ài)礙唉

你這個(gè)是分組, 如果你學(xué)過(guò)Java8,那么用stream來(lái)處理賊簡(jiǎn)單,set.stream().collect(Collectors.groupingBy(new Function(){}));
如果你不知道Java8 ,下面的文章能幫到你。https://www.oschina.net/quest...

2018年8月21日 11:49
編輯回答
心上人

對(duì)set進(jìn)行iterator遍歷,可以得到每一個(gè)place對(duì)象,然后map.put(place.getName, place),就可以了。

2018年2月3日 09:12