изменить ключи карты Java - производительность - PullRequest
0 голосов
/ 10 мая 2018

У меня есть требование изменить ключи связанной хэш-карты. Это мой код.

Map<String, String> map = record.toMap();
Map<String,String> modifiedMap  = new HashMap<>();

map.forEach(
    (key,value) -> {
        if (key.endsWith("\"") && key.startsWith("\"")) {
            modifiedMap.put(key.toUpperCase().substring(1, key.length()-1), value);
        } else {
            modifiedMap.put(key.toUpperCase().trim(), value);
        }
    }
);

Это быстрее, чем традиционный цикл for? Кроме того, есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 10 мая 2018

Это так же хорошо, как и получается. Вы не можете внести O(N) изменений менее чем за O(N) время.

Мы можем сделать стилистические улучшения, хотя. Обратите внимание, что .trim() бесполезен в первом случае, потому что key начинается и заканчивается кавычками, и мы можем удалить некоторое дублирование кода:

map.forEach((key, value) -> {
    key = key.toUpperCase();
    if (key.endsWith("\"") && key.startsWith("\"")) {
        modifiedMap.put(key.substring(1, key.length() - 1), value);
    } else {
        modifiedMap.put(key.trim(), value);
    }
});

Хотя я подозреваю, что вы также хотите trim после взятия substring, и в этом случае это становится еще проще:

map.forEach((key, value) -> {
    if (key.endsWith("\"") && key.startsWith("\"")) {
        key = key.substring(1, key.length() - 1);
    }
    modifiedMap.put(key.trim().toUpperCase(), value);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...