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

标签 java java-8

我有一张 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/

相关文章:

java - Java 8 与 Java 7 中的 Math.pow 性能

java - 如何制作 JFrame 的 PDF(包括未显示的 JScrollPane 部分)?

java - Clojure 转换器与 Java 中流的中间操作的概念相同吗?

java - 区分鼠标拖动和鼠标单击/释放

java - 如何以无锁方式原子更新2个对象?

java - 在 Java 8 中计算两个日期之间的天数

java - Java 11 上的 SocketTimeout,但 Java 8 上没有

java - 为什么 .forEach(val -> list.add()) 编译而 .forEach(val -> true) 不编译?

java - 是什么导致开发模式执行速度如此之慢?

java - 如何通过 ListView Item 链接到网站