Я столкнулся с сценарием, в котором я хочу зачеркнуть все ключи HashMap (не спрашивайте, почему, я просто должен это сделать). У HashMap есть несколько миллионов записей.В нижнем регистре все ключи HashMap
Сначала мне показалось, что я просто создаю новую карту, перебираю элементы карты, которые должны быть внизу, и добавляю соответствующие значения. Эта задача должна выполняться только один раз в день или что-то в этом роде, поэтому я подумал, что могу это сделать.
Map<String, Long> lowerCaseMap = new HashMap<>(myMap.size());
for (Map.Entry<String, Long> entry : myMap.entrySet()) {
lowerCaseMap.put(entry.getKey().toLowerCase(), entry.getValue());
}
это, однако, вызвало некоторые OutOfMemory ошибки, когда мой сервер был перегружен в этот момент времени, что я собирался скопировать карту.
Теперь мой вопрос: как я могу выполнить эту задачу с наименьшим объемом памяти?
Удалил бы каждый ключ после нижнего регистра - добавил к новой подсказке карты?
Могу ли я использовать потоки java8, чтобы сделать это быстрее? (Например, что-то вроде этого)
Map<String, Long> lowerCaseMap = myMap.entrySet().parallelStream().collect(Collectors.toMap(entry -> entry.getKey().toLowerCase(), Map.Entry::getValue));
Update Кажется, что это Collections.unmodifiableMap
, так что я не имеет возможности
удаления каждый ключа после строчного - добавляемого к новой карте
не могли бы вы вставить ключи в нижнем регистре, в первую очередь? – Eran
Нет ... Я использую API для получения этой Карты - это не мой код. – sestus
Сохраняется ли чувствительность оригиналов к регистру? – davidxxx