Java 如何基于键编辑Hashmap列表值

Java 如何基于键编辑Hashmap列表值,java,hashmap,Java,Hashmap,我需要根据键编辑列表值。 我的代码是: HashMap<String,List<String>> map= new HashMap<String,List<String>>() List<String> listOMSColorCode = new ArrayList<String>() List<String> listOMSColorCodeDisplayOrder = new ArrayList<S

我需要根据键编辑列表值。 我的代码是:

HashMap<String,List<String>> map= new HashMap<String,List<String>>()

List<String> listOMSColorCode = new ArrayList<String>()
List<String> listOMSColorCodeDisplayOrder = new ArrayList<String>()

listOMSColorCode.add("orange")  
listOMSColorCode.add("apple")
listOMSColorCode.add("banana")

map.put("Key1",listOMSColorCode) 
在这里发生一些逻辑之后,现在我想在地图列表的同一索引中用grapes替换/编辑apple。

您可以使用ListIterator:

for(ListIterator<String> li = listOMSColorCode.listIterator(); li.hasNext(); ) {
    if(li.next().equals("apple")) {
        li.set("grape");
    }
}

ifli.next.equalsapple{检查listIterator的当前元素是否是apple,如果是。它通过listIterator.set方法将该元素替换为grape,但效率不高,因为它会对每个事件迭代列表,但这将替换所有事件:

List<String> modifiedList = map.get("Key1");
int index = 0;
while((index = modifiedList.indexOf("apple")) != -1){
    modifiedList.set(index, "grapes");
}
或者使用Collections类中的实用程序方法:

List<String> modifiedList = map.get("Key1");
Collections.replaceAll(modifiedList, "apple", "grapes");

您可以删除apple并添加grapes。在列表中,您可以使用indexOf和set方法。我很好奇……这是否可以使用stream API实现?我的意思是用给定键的值中出现的所有字符串x替换为y……listOMSColorCode.replaceAlla->{if a.equalsapple返回grapes;else返回a;}though@deHaar您可以流式处理列表,然后如果元素是苹果,则返回葡萄,否则只返回元素。但这将必须收集到新列表中,这将有点低效。replaceAll看起来像一个real尼斯实用程序,并将根据列表大小和随机访问选择最佳变体。+1