如何创建Map支持的可变List

时间:2018-05-25 18:34:10

标签: java list dictionary decorator mutable

如果我有将List<E>值映射到键Map<K, E>的方法,如何返回由Map支持的valueToKeyMapper

class Foo {
   private Map<Integer, String> backedMap = new HashMap<Integer, String>();

   public List<String> getList() {
      // NEED TO RETURN LIST BACKED BY MAP
   }

   public String getById(Integer id) {
      return backedMap.get(id);
   }

   private static Integer valueToKeyMapper(String value) {
      // just as exampl. In reality value will be POJO with method like getId()
      return value.hashCode();
   }
}

代码应该像这样工作(简单示例):

Foo foo = new Foo();
foo.getList().add("something");
String value = foo.getById("something".hashCode());
// I should see something

注意:

  • List应该是可变的,并且必须在基础Map
  • 中传播更改
  • 我无法修改对象Foo的公共方法,因为它已在其他项目中使用
  • 我不关心List
  • 中的订单
  • getById方法应该继续快速工作

2 个答案:

答案 0 :(得分:0)

尝试这样的事情:---

/var/log/cron

答案 1 :(得分:0)

尝试在github上使用此ListListBackedByMap.java

它使用ForwardingList来维护地图中列表的内部副本。

我发现这个impl有两个问题:

  1. 它在内存中维护了额外的元素副本
  2. 尝试修改迭代器中的列表时不会抛出ConcurrentModificationException
  3. 测试可用here