Java 8 новые методы в Map
Данная статья написана командой Vertex Academy. Это одна из статей из нашего Учебника по Java 8. Надеемся, что данная статья Вам будет полезна. Приятного прочтения!
1. Введение
В Java 8, как мы знаем, появился Stream API, который, к сожалению не включает в себя Map-ы. Тем не менее, в Map было добавлено несколько полезных методов для уменьшения количества "плохого" кода.
2. PutIfAbsent()
До выхода Java 8 для того, чтобы добавить пару в Map, если ее там нет, необходимо было делать следующее
1 2 3 |
Map<String, String> map = new HashMap<>(); if (map.get("name") == null) map.put("name", "Gus"); |
Теперь же все упростилось до вызова одного метода
1 2 |
Map<String, String> map = new HashMap<>(); map.putIfAbsent("name", "Gus"); |
3. СomputeIfPresent()
Если нам необходимо произвести какое-то действие со значением в Map, если оно там есть, то и на этот счет в Java есть метод
1 2 3 4 5 6 |
Map<String, String> map = new HashMap<>(); map.put("name", "Joan"); map.computeIfPresent("name", (key, value) -> key + ", " + value); System.out.println(map.get("name")); //output: name, Joan |
В данном случае, мы объединили ключ и значение в Map.
1 2 3 4 5 |
Map<String, String> map = new HashMap<>(); map.computeIfPresent("awesome key", (key, value) -> key + ", " + value); System.out.println(map.get("awesome key")); //output: null |
А вот тут, раз такого ключа нет, то и объединение не происходило.
4. СomputeIfAbsent()
Здесь все обратно предыдущей ситуации, действие произойдет в том случае, если значения нет
1 2 3 4 5 |
Map<String, String> map = new HashMap<>(); map.computeIfAbsent("awesome key", key -> key + ", " + "amazing value"); System.out.println(map.get("awesome key")); //output: awesome key, amazing value |
А вот если оно есть
1 2 3 4 5 6 |
Map<String, String> map = new HashMap<>(); map.put("awesome key", "cool value"); map.computeIfAbsent("awesome key", key -> key + ", " + "amazing value"); System.out.println(map.get("awesome key")); //output: cool value |
То значение останется без изменений
5. Remove()
Хотим удалить из Map пару, если совпадает и ключ, и значение? Легко
1 2 3 4 5 6 7 8 |
Map<String, String> map = new HashMap<>(); map.put("surname", "Petrov"); map.remove("surname", "Vasichkin"); System.out.println(map.get("surname")); // Petrov map.remove("surname", "Petrov"); System.out.println(map.get("surname")); // null |
6. GetOrDefault()
По аналогии с Optional,можно вернуть значение по умолчанию, если с таким ключем нет значения
1 2 3 4 5 6 7 8 9 |
Map<String, Integer> map = new HashMap<>(); map.put("number", 100500); Integer value = map.getOrDefault("number", 0); System.out.println(value); // 100500 Integer valOrDefault = map.getOrDefault("I forgot my key", 0); System.out.println(valOrDefault); // 0 |
7. Merge()
Если друг понадобилось объединить значение в Map с другим, то это легко сделать с помощью merge()
1 2 3 4 5 6 |
Map<String, String> map = new HashMap<>(); map.put("question", "Bla?"); map.merge("question", " Blabla", (oldVal, newVal) -> oldVal + newVal); System.out.println(map.get("question")); // Bla? Blabla |
При этом, если такой пары в Map нет, она будет создана
1 2 3 4 5 |
Map<String, String> map = new HashMap<>(); map.merge("question", "answer", (oldVal, newVal) -> oldVal + newVal); System.out.println(map.get("question")); // answer |
В Java 8 есть еще множество полезных нововведений, которые можно найти тут
Есть возможность записаться на наши курсы по Java. Детальную информацию смотрите у нас на сайте.