gpt4 book ai didi

java - 从字符串映射中删除几个元素到特定键的列表

转载 作者:搜寻专家 更新时间:2023-11-01 02:18:55 24 4
gpt4 key购买 nike

我有一张 map 。输入来自另一个类,所以我无法更改格式。在我的例子中,该值是一个列表。我想删除特定键的一些元素。例如,下面是输入映射:

Map<String, Object> map = new HashMap<>();
map.put("1", Arrays.asList("A","V","C","M"));
map.put("Roll", 123);

这张“ map ”已提供给我,我想删除 Key = "1"的两个条目,即 Arrays.asList("V","M")

我尝试了下面的代码,它成功了。我想知道有没有比这更好的方法。注意:我正在尝试使用 Java 8 来完成。

List<String> list = Arrays.asList("V","M") 
List<String> lst = map.entrySet().stream()
.map(Map.Entry::getValue)
.filter(c -> c instanceof Collection)
.map(c -> (Collection<String>)c)
.flatMap(Collection::stream)
.collect(Collectors.toList());

lst.removeIf(c -> list.contains(c));

/** * 之后,我可以再次将这个最终列表添加到 map 中。 */

final output: <"1", {"A", "C"}>
<"Roll", 123>

最佳答案

执行此操作不需要流,如果 Map 中存在的键更改值,我更喜欢使用 computeIfPresent 否则忽略。不要使用 Arrays.asList除非你需要不可变列表,因为它不支持 remove 操作

List<String> list = new ArrayList<String>();
list.add("A");
list.add("V");
list.add("C");
list.add("M");

Map<String, Object> map = new HashMap<>();
map.put("1", list);
map.put("Roll", 123);

List<String> remove = Arrays.asList("V","M");

map.computeIfPresent("1", (k,v)->{
if(Objects.nonNull(v) && v instanceof List) {
@SuppressWarnings("unchecked")
List<String> result = (List<String>) v;
result.removeIf(i->remove.contains(i));
return result;
}
return v;
});

System.out.println(map); //{1=[A, C], Roll=123}

关于java - 从字符串映射中删除几个元素到特定键的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57268210/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com