您的方法基本上是正确的,Guava的拆分器中没有API以特定的方式解析值,因此您必须迭代两次(除非您决定放弃)
MapSplitter
只要使用
Splitter
也就是说,这里有方便的收藏
Map<Foo, Collection<Bar>>
Multimap
--就你而言
SetMultimap
(最好是
ImmutableSetMultimap
),例如:
String pairs = "cat:01,02,03;dog:AA,BB,CC;fish:A1,A2";
Map<String, String> map = Splitter.on(';')
.withKeyValueSeparator(':')
.split(pairs);
ImmutableSetMultimap<String, String> pairMap = map.entrySet().stream()
.collect(ImmutableSetMultimap.flatteningToImmutableSetMultimap(
Map.Entry::getKey,
e -> Streams.stream(Splitter.on(',').split(e.getValue()))));
System.out.println(pairMap);
// {cat=[01, 02, 03], dog=[AA, BB, CC], fish=[A1, A2]}