【发布时间】:2019-12-03 07:14:48
【问题描述】:
有一个类似于以下的 SQL 查询:
SELECT DISTINCT REGION, COUNTRY, CITY
产生这个结果集
地区国家城市 欧洲 法国 巴黎 欧洲 法国 里昂 欧洲 法国 尼斯 欧洲 德国 柏林 欧洲 德国 多特蒙德 欧洲 德国 汉诺威有没有办法使用谷歌的 ListMultimap 以便我最终得到一个键 -> 值 -> 值结构?
例如
{EUROPE
{GERMANY
{BERLIN, DORTMUND, HANNOVER},
FRANCE
{PARIS, LYON, NICE}
}
}
或者另一个包更适合这个?
编辑:
尝试实现@Prog_G 的解决方案,但使用以下方法内存不足。我认为最后我必须将外部转换为另一个数据结构。我会以某种方式以此创建地图吗? PS。真实的例子更深一层,但为了这个问题想让它更简单。
private static class GeoRowMapper implements RowCallbackHandler {
ListMultimap<String, ListMultimap<String, ListMultimap<String, String>>> outer = ArrayListMultimap.create();
ListMultimap<String, ListMultimap<String, String>> middle = ArrayListMultimap.create();
ListMultimap<String, String> inner = ArrayListMultimap.create();
@Override
public void processRow(ResultSet rs) throws SQLException {
String region = rs.getString("region");
String country = rs.getString("country");
String city = rs.getString("city");
String address = rs.getString("address");
inner.put(city, address);
middle.put(country, inner);
outer.put(region, middle);
}
public ListMultimap<String, ListMultimap<String, ListMultimap<String, List<String>>>> get() {
return Multimaps.asMap(outer);
}
}
【问题讨论】:
-
查看 Guava 的
Table。或者只使用Map<String, Map<String, List<String>>>。 -
试试这个例子:ListMultimap
>> multimap = ArrayListMultimap.create(); ListMultimap > inner = ArrayListMultimap.create(); inner.put("innerkey1", Arrays.asList("value1")); multimap.put("key1", inner); System.out.println(multimap.toString()); -
@gurioso,理想情况下我想在最后创建一个地图。
-
@Prog_G 我尝试实现您的解决方案,但内存不足
-
意思是,你的意思是这个结构{EUROPE{GERMANY{BERLIN, DORTMUND, HANNOVER}, FRANCE{PARIS, LYON, NICE}}}?