Для достижения того, что вы на самом деле просите:
Перед вашей put
строкой:
while (data.containsKey(key)) key += "_";
data.put(key, value);
При этом будет продолжаться проверка карты, чтобы увидеть, существует ли key
, и если это так, он добавляет _
в конец и пытается снова.
Вы можете сделать эти две строки в одной:
while (data.putIfAbsent(key, value) != null) key += "_";
Это в основном то же самое, но это просто избегает необходимости искать дважды в случае, если ключ не найден (и, следовательно, значение должно быть вставлено).
Однако подумайте, действительно ли это лучше всего сделать: как Затем вы будете искать вещи по «ключу», если вы, по сути, составили ключи во время их чтения.
Вы можете сохранить несколько значений на ключ, используя тип значения, в котором хранятся несколько значений, например, List<String>
.
HashMap<String, List<String>> data = new HashMap<>();
// ...
data.computeIfAbsent(key, k -> new ArrayList<>()).add(value);