我有一张地图
Map<Integer, List<Object>> entireData;现在,我使用putAll添加了一些数据,比如
entireData.putAll(someData);其中someData返回Map<Integer, List<Object>>
现在,我有另一句话说
entireData.putAll(someMoreData);这也会返回Map<Integer, List<Object>>,但是通过这样做,它会覆盖现有entireData的内容,我该如何追加呢?
发布于 2011-01-06 17:41:26
默认情况下,Java Maps将一个键映射到一个值as trojanfoe writes。如果这还不足以满足您的需求,那么您需要一个多映射实现(从一个键映射到一个值集合的映射)。
最流行的版本可以在两个开源框架Google Guava和Apache Commons / Collections中找到。
Guava示例:
final Multimap<Integer, String> mmap =
    Multimaps.newSetMultimap(
        Maps.<Integer, Collection<String>> newHashMap(),
        new Supplier<Set<String>>(){
            @Override
            public Set<String> get(){
                return Sets.newHashSet();
            }
        });
mmap.put(1, "foo");
mmap.put(1, "bar");
System.out.println(mmap.get(1));输出:
foo,bar
公共集合示例:
final MultiMap mmap = new MultiHashMap();
mmap.put(1, "foo");
mmap.put(1, "bar");
System.out.println(mmap.get(1));输出:
foo,bar
正如您所看到的,Commons Collections版本要简单得多,但它的功能也较弱,并且在当前版本中不支持Java1.5泛型。所以我会选芭乐。
https://stackoverflow.com/questions/4613386
复制相似问题