for (String s: list)
result.put(s, result.getOrDefault(s, 0)+1);
Может мне кто максимально подробно объяснить, что здесь происходит?
CilitBang
25 уровень
Как работает getOrDefault()?
Решен
Комментарии (13)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Андрей
4 декабря 2020, 15:42
Map<String, String> map = new HashMap<>();
map.put("1", "Foo");
//search for the entry with key==1, since present, returns foo
System.out.println(map.getOrDefault("1", "dumnba"));
//search for the entry with key==2, since not present, returns dumnba
System.out.println(map.getOrDefault("2", "dumnba"));
0
Даниил Salesforce Developer в Customertimes Master
7 ноября 2019, 21:02
Из того что есть в примере можно понять только что в какую-то Map result добавляеться пара с ключом s и значение которое ты получишь из этой же Map по этому ключу + 1, или 0 + 1 если пары с таким ключом нет.
0
CilitBang Performance QA Lead в КЕФИР!
7 ноября 2019, 21:07
Указано, для какой это задачи. А код в вопросе ее решение, просто не до конца понимаю, как это работает.
0
Даниил Salesforce Developer в Customertimes Master
7 ноября 2019, 21:16
Ну скажу честно, многим будет лень заходить лишний раз в свой проект и искать эту задачу (или может это я один такой).
На счёт как это работает: у тебя есть метод который принимает 2 аргумента (put(key, value)). Ты можешь спокойно подставлять в эти аргументы что угодно что имеет подходящий тип (класс) будь-то это сразу нужный объект/примитив или будь-то это результат выполнения метода. В данном случае
result.getOrDefault(s, 0)+1
значит следующее: получить результат выполнения метода getOrDefault(s, 0) и к нему прибавить 1 что бы он не вернул (только в случае если он возвращает подходящий тип данных который просит от него метод put() ). Что именно возвращает метод getOrDefault(s, 0) тебе желательно найти самому. Посмотри здесь (найдёшь название метода, кликнешь по нему и будет тебе описани. Или в IntelliJ IDEA поставь курсор на название метода и нажми Ctrl + Q)
+3
CilitBang Performance QA Lead в КЕФИР!
7 ноября 2019, 21:22
Я понимаю, что он возвращает. Я не понимаю, как он возвращает значение по ключу, если этого значения нет) Т.е. у нас пустая мапа, мы в нее кладем (s, result.getOrDefault(s, 0)+1), где s это ключ, а getOrDefault(s, 0)+1 значение. Если ключа не будет он вернет значение по умолчанию, т.е. 0 и прибавит 1. Но если ключ есть, он вернет значение, которое ему соответствует и прибавит к нему 1. Но ведь у нас нет этого значения, мы его не добавили. Поэтому я и не понимаю, как это работает.
+1
Даниил Salesforce Developer в Customertimes Master
7 ноября 2019, 21:26решение
Ты сам ответил на свой вопрос) Если такого ключа нет, то вернёт значение по умолчанию (что автоматически произойдёт на пустой мапе), а значение по умолчанию ты задаёшь сам (в данном случае 0)
+2
CilitBang Performance QA Lead в КЕФИР!
7 ноября 2019, 21:31
Спасибо, разобрался. Я почему-то думал, что когда мы делаем
result.put(s, result.getOrDefault(s, 0)+1); s УЖЕ там лежит, хотя мапа все еще пустая)
0
Даниил Salesforce Developer в Customertimes Master
7 ноября 2019, 21:32
Бывают моменты когда даже очевидное не лезет в голову)
+1
bakvit
5 июля 2021, 20:23
package com.javarush.task.task10.task1016;
/*
Одинаковые слова в списке
*/
если кто то ищет задание, оно тут -> Java Syntax, 10 уровень, 11 лекция
0
Ksenia Volkova Java Developer в DXC Master
7 ноября 2019, 21:00
Если в result есть пара с ключом s, то вернуть ее значение, если нет - вернуть 0. К этому полученному результату прибавить 1 и положить обратно в result с ключом s.
+4
CilitBang Performance QA Lead в КЕФИР!
7 ноября 2019, 21:09
Вот тут у меня возникает еще один вопрос. Мы только начали заполнять мапу, откуда в ней возьмется значение, если мы кладем туда result.getOrDefault(s, 0)+1? Т.е. ключ s, но если ключ есть, то ведь нет значения, к которому можно прибавить 1.
0
Ksenia Volkova Java Developer в DXC Master
7 ноября 2019, 21:27
Не может такого быть, чтобы был ключ, но не было значения. В мапе же хранятся именно пары. А вот как раз на случай, когда там нет нужного ключа, в методе указано дефолтное значение (0). Тогда мы этот 0 кладем в мапу с ключом s.
+2
Даниил Salesforce Developer в Customertimes Master
7 ноября 2019, 20:58
Код прикрепи для начала)))
0