Protobuf Java - нечувствительная к регистру карта?

У меня есть карта, которая содержит введенное пользователем имя удаленного компьютера и введенное пользователем имя на хосте для запущенной там программы. Не нужно дублировать записи, потому что пользователь один раз набрал заглавные буквы, а затем ввел то же имя в нижнем регистре.

Прото:

map<string, string> host_and_name = 1;

При сохранении в идеале я мог бы использовать этот метод, потому что карта помечена с учетом регистра. Однако это не поведение по умолчанию, и я не вижу способа украсить иначе. Надеюсь, я что-то упускаю.

cache.putHostAndHame( hostName, strategyName );

Зная, что я могу перебрать все значения карты и поставить их только в том случае, если не найду совпадения equalsCaseInsenstive. Я закончу тем, что сделаю это, если мне придется, хотя это кажется немного грубой силой.


person Evan    schedule 16.05.2019    source источник
comment
Вам нужно сохранить корпус? Если нет, вы всегда можете сохранить их как все строчные буквы при их размещении, чтобы их было легко проверить после.   -  person Nexevis    schedule 16.05.2019
comment
У вас нет вариантов поведения карты. Во всех смыслах и целях карта ведет себя как обычный LinkedHashMap. Если вам нужны нечувствительные к регистру ключи, вы должны справиться с этим самостоятельно, нормализовав регистр перед вводом/получением.   -  person Andy Turner    schedule 16.05.2019
comment
В идеале мне нужно сохранить дело. И ключ, и значение отображаются обратно для пользователя, а затирание регистра делает строки более трудными для чтения. Как правило, это несколько слов без пробела между ними по деловым причинам. Надо было упомянуть об этом первым, но хороший вопрос, Нексевис.   -  person Evan    schedule 17.05.2019


Ответы (1)


если вам нужно проверить и вставить карту host_and_name, вы можете преобразовать все символы в нижний регистр, и всякий раз, когда вы вводите каждый хост или имя, все символы будут отображаться в нижнем регистре.

как ниже

import java.io.*;
public class Test {

   public static void main(String args[]) {
      String str = "My Sample Text";

      System.out.print("Return Value :");
      System.out.println(str.toLowerCase());
   }
}
  • выход

Возвращаемое значение: мой образец текста

а также вы можете поместить его на свою карту и сделать цикл foreach, чтобы проверить, что хост или имя уже есть на карте. проверьте это

Надеюсь, вы уловили идею. если есть какие-либо вопросы, комментарии ниже. Благодарю.

Также у этого вопроса есть хорошие ответы на то, что вам нужно реализовать.

person Dileepa Nipun Salinda    schedule 16.05.2019
comment
(Почти) никогда не бывает причин писать new String("..."). Просто используйте "..." вместо этого. - person Andy Turner; 16.05.2019
comment
Это хорошая идея, но, к сожалению, как упоминалось в комментариях выше, не идеально отбрасывать регистр, поскольку эти значения отображаются обратно пользователю. На данный момент я повторяю, не изменяя карту, если обе стороны равны, удаляя значение, а затем добавляя, если ключ уже существует. Основываясь на комментарии Энди Тернера о том, что для клавиш, не чувствительных к регистру, нет опции, похоже, вы выделили обе доступные мне опции. - person Evan; 17.05.2019