Java 8:更改 EntrySet 流的值

2022-09-02 02:18:35

我有以下设置:

Map<Instant, String> items;
...
String renderTags(String text) {
    // Renders markup tags in a string to human readable form
}
...
<?> getItems() {
    // Here is where I need help
}

我的问题是,作为地图值的字符串是用标签标记的。我想返回所有项目,但使用该方法解析字符串。像这样:itemsgetItems()renderTags(String)

// Doesn't work
items.entrySet().stream().map(e -> e.setValue(renderTags(e.getValue())));

最有效的方法是什么?


答案 1

如果您想要一个结果:Map

Map<Instant, String> getItems() {
    return items.entrySet()
            .stream()
            .collect(Collectors.toMap(
                    Map.Entry::getKey,
                    e -> renderTags(e.getValue())));
}

答案 2

如果要修改现有地图而不是生成新地图(如示例中所示),则根本不需要使用流。用:Map.replaceAll

items.replaceAll((k, v) -> renderTags(v));
return items;

如果要保持原始地图不变,请查阅其他答案。