特定のキーのリストにある文字列の地図からいくつかの要素を削除します

RoyalTiger:

私は地図を持っています。入力は、他のクラスから来ているので、私は形式を変更することはできません。値は、私の場合は一覧です。私は特定のキーのためのいくつかの要素を削除したいです。例えば、以下の入力マップです。

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

これは、つまり、私に与えられて、私はキー=「1」のための2つのエントリを削除したいされてきた「マップ」 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));

/ ** *この後、私は再びマップに、この最終的なリストを追加することができます.. * /

final output: <"1", {"A", "C"}>
                 <"Roll", 123>
デッドプール :

、私が使用して好むこれを行うためのストリームの必要はありませんcomputeIfPresent中にキー存在する場合Map、ALTER値は他の無視は。使用しないでくださいは、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}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=229880&siteId=1