Как удалить из HashMap, если значение присутствует в стиле Java 8 - PullRequest
4 голосов
/ 27 марта 2019

Есть Map<String, List<String>>. Я хочу удалить значение из List, если Map содержит ключ.

Но есть ли способ сделать это в стиле Java 8 ? Как, например, использование compute, merge или какой-то другой новый метод?

Код для удаления элемента из списка в старом стиле:

public class TestClass {


    public static void main(String[] args) {
        Map<String, List<String>> map = new HashMap<>();
        map.put("key1", getList());
        map.put("key2", getList());

        //remove
        if (map.containsKey("key1")) {
            map.get("key1").remove("a2");
        }
        System.out.println(map);
    }

    public static List<String> getList(){
        List<String> arr = new ArrayList<String>();
        arr.add("a1");
        arr.add("a2");
        arr.add("a3");
        arr.add("a4");

        return arr;
    }   
}

Ответы [ 2 ]

8 голосов
/ 27 марта 2019

Вы можете использовать Map.computeIfPresent(), но улучшение сомнительно:

map.computeIfPresent("key1", (k, v) -> { v.remove("a2"); return v; });
4 голосов
/ 27 марта 2019

Нам не нужно Java-8-ify все. Ваш код в порядке, как есть. Однако, если вы хотите, предложение Кароль в порядке, а вот еще одно:

    Optional.ofNullable(map.get("key1")).ifPresent(v -> v.remove("a2"));

Мнения расходятся относительно того, является ли это неправильным использованием Optional. Это, конечно, не его основное предназначение, но я считаю его приемлемым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...