[英]How do I create a mutable List backed by Map
如果我有將Map
值映射到鍵valueToKeyMapper
的方法,如何返回由Map<K, E>
List<E>
支持的List<E>
?
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
方法應該繼續快速工作嘗試這樣的事情:---
List<String> list = new ArrayList<>();
Set keys = backedMap.keySet();
for (Iterator i = keys.iterator(); i.hasNext(); ) {
Integer key = (Integer) i.next();
String value = (String) backedMap.get(key);
list.add(value);
}
//To print Values in ArrayList :--
for(String s : list) {
System.out.println("printing element -- " + s);
}
嘗試在 github 上使用此List
: ListBackedByMap.java
它使用ForwardingList來維護地圖中列表的內部副本。
我發現這個 impl 有兩個問題:
ConcurrentModificationException
。可在此處進行測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.