Luk*_*der 3 java guava apache-commons-collection
我正在查看各种google-collections(或者也就是Apache commons集合)类,我希望在为我的用例找到最合适的Map实现方面有所帮助.我对本土地图不感兴趣.
以下是一些要求:
Map<String, List<String>>数据结构(A)Map<String, String>只读视图(B).B.get(X) == A.get(X).get(A.get(X).size() - 1)我知道ArrayListMultimap,但它没有公开满足我对(B)要求的观点.
有什么指针吗?
Jon*_*eet 12
我怀疑你只想要Maps.transformValues番石榴:
Map<String, String> lastValueView = Maps.transformValues(originalMap,
new Function<List<String>, String>() {
@Override
public String apply(List<String> input) {
return input.get(input.size() - 1);
}
});
Run Code Online (Sandbox Code Playgroud)
根据@ JonSkeet的回答,我建议你使用Guava ListMultimap作为你的(A)类型.此类型确保您始终具有至少一个元素作为地图的一部分的列表,并且该.asMap()方法返回一个视图Map<String, List<String>>(即使签名没有这样说).
该Maps.transformValues方法还返回一个视图,因此源地图中的更改将反映在目标地图中.但请注意,"返回的映射不是线程安全的或可序列化的,即使底层映射是.":
ListMultimap<String, String> source = ArrayListMultimap.create();
Map<String, String> target = Maps.transformValues(source.asMap(), new Function<Collection<String>, String>() {
@Override
public String apply(Collection<String> input) {
return Iterables.getLast(input);
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
343 次 |
| 最近记录: |