【问题标题】:Java8 remove keys from List<Map<String, Object>> [duplicate]Java8 从 List<Map<String, Object>> 中删除键 [重复]
【发布时间】:2022-01-27 06:34:48
【问题描述】:

我有一个 List>,如果存在,我需要删除嵌套的 key = "age" 并返回地图列表。如何使用流()优雅地做到这一点?

Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("Name", "Michael");
map1.put("Age", 43);
map1.put("City", "Paris");

Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("Name", "Tanja");
map2.put("Age", 23);
map2.put("City", "Berlin");

Map<String, Object> map3 = new HashMap<String, Object>();
map3.put("Name", "Diego");
map3.put("Age", 35);
map3.put("City", "Madrid");

List<Map<String, Object>> list = new ArrayList<>();
list.add(map1);
list.add(map2);
list.add(map3);

例子:

[
     {Name="Michael", age=43, city="Paris"},
     {Name="Tanja", age=23, city="Berlin"},
     {Name="Diego", age=35, city="Madrid"}
]

到:

[
     {Name="Michael", city="Paris"},
     {Name="Tanja", city="Berlin"},
     {Name="Diego", city="Madrid"}
]

感谢您的帮助。

【问题讨论】:

  • 您需要副本还是需要编辑现有的限制? (如果是后者,那么这个问题不太适合流)
  • @paulsm4 OP 没有尝试删除列表中的元素。

标签: java java-stream filtering


【解决方案1】:

你可以简单地使用这个:

 list.forEach(stringObjectMap -> {
     stringObjectMap.remove("Age");
 });

由于地图对象是一个引用,您可以简单地从地图中删除一个键,而无需将其复制到另一个地图对象中。

【讨论】:

    【解决方案2】:

    尝试类似:

    List<Map<String, Object>> result = list.stream()
        .filter(x -> x.entrySet().removeIf(y -> y.getKey().equals("Age")))
        .collect(Collectors.toList());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-06
      • 2021-04-29
      • 1970-01-01
      • 2018-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多