Сравнение строки со значениями в списке

#java #string #list #arraylist #contains

#java #строка #Список #arraylist #содержит

Вопрос:

У меня есть два значения, 5 и 6, оба из которых являются целыми числами, которые являются частью ArrayList . У меня также есть другой логический метод, который вводит строку, и мне нужно сравнить значение этой строки и просмотреть этот список и посмотреть, соответствует ли это значение элементу в этом списке. Если оно совпадает, то я должен вернуть true, иначе false . Цель состоит в том, чтобы увидеть, соответствует ли мое значение одному из значений в списке. Список является частью класса constants, и у меня есть свой метод в классе Validator . Ниже приведен мой код:

Constants.java:

 public static final List<Integer> TYPES = new ArrayList<Integer> (Arrays.asList(5,6));
  

Validator.java:

 public static boolean isPromoTypeFormatValid (String value) {
    value = Util.getTrimmedValue(value);
    int intValue = Integer.valueOf(value);
    List <Integer> promoTypeList = scpduuConstants.PROMO_TYPES;
    for(int i = 0; i < promoTypeList.size(); i  ) {
        if (promoTypeList.contains(intValue)) {
            return true;
        }
    }
    return false;
}
  

Есть ли лучший способ сделать это, и возникнет ли у меня проблема при сравнении строкового значения со значением ArrayList, когда оно является целым числом? Я немного новичок в этом, но пытаюсь найти наиболее эффективный из возможных способов. Пожалуйста, дайте мне знать о любых предложениях.

Комментарии:

1. typesList.contains(value) работает с несовместимыми типами на основе вашего кода .. компилятор не будет жаловаться, но сравнение завершится неудачей.

2. Contains использует equals метод. Строка никогда не будет равна целому числу сначала вам нужно преобразовать строку в целое число, используя Integer.valueof

3. @олег отметил! Я изменил сообщение, чтобы показать это. Мне просто интересно, какова эффективность обрезки строкового значения, затем установите другую переменную, которая содержит значение int этой строки, используя метод Integer.valueOf(), а затем просматривайте список, чтобы увидеть, содержится ли мое новое значение intValue в списке. Есть способ это исправить?

4. Ваш код будет работать так. Но вы должны проверить Integer.valueOf() , выдает ли NumberFormatException . Я думаю, в этом случае вы тоже хотели бы вернуться false ?

5. Цикл не нужен, если contains метод используется для проверки наличия значения intValue в списке; если значения нет в списке, избыточные вызовы будут выполняться несколько раз.

Ответ №1:

Может быть, это немного помогает:

 public static final List<Integer> TYPES = new ArrayList<Integer>(Arrays.asList(5, 6));

public static void main(String[] args) {

    final String value = "5";

    checkValue(value);

}

public static boolean checkValue(String value) {

    final var valueAsInt = Integer.parseInt(value.trim());
    
    return TYPES.contains(valueAsInt);

}