У меня есть массив, и я хочу проверить, все ли значения из массива равны тому, что я хочу, используя edittext

#java #android #arraylist

#java #Android #arraylist

Вопрос:

Вот пример моего массива

List<Integer> sampleList = new ArrayList<>();

все значения внутри этого массива являются:

sampleList = [1,2,3,4,5,6]

В основном я использую for для перебора каждого значения из этого массива

 for (int i = 0; i < sampleList.size(); i  ) {
     int to = sampleList.get(i);
     if (norooms == to) { //norooms = 1
         //display a toast 
      }
  }
  

Я хочу проверить, все ли позиции 0-5 равны 1, но я не могу этого достичь. Любая помощь

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

1. что moroons должно быть в?

2. вы хотите проверить, все ли элементы равны norooms, или вы хотите проверить, все ли элементы равны norooms? это всего лишь слово, но большая разница.

3. это количество комнат, которые нужны пользователям. Получено с использованием общих настроек

4. @Stultuske Я хочу проверить все элементы, если они равны norooms

5. как может быть количество комнат, если комнат нет?

Ответ №1:

Вы можете попробовать что-то вроде этого.

 int editTextValue = 3; // Your edit text value
boolean isEqual = true;//Flag to check if all the values are equal or not.
 for (int i=0; i<sampleList.size(); i  ){
        if (sampleList.get(i) != editTextValue){
            isEqual = false;
            break;
        } 
    }
  

Затем проверьте условие isEqual после завершения цикла и обработайте соответствующим образом.

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

1. это больше не будет проверять все значения

2. Ему нужно знать, все ли значения равны EditText значению. Таким образом, даже если одно из значений отличается, это решит его цель.

3. нет, я спросил об этом в комментарии, он хочет, чтобы сравнение было выполнено для всех элементов

4. @Joshua это ответит, идентичны ли все значения или нет, но не будет проверять это для каждого уникального элемента. Это также означает, что если в ваших требованиях указано, что вам нужно проверить, сколько из них отличаются, вы не сможете найти это с помощью this .

5. @Stultuske Верно. он будет проверять только, идентичны ли значения. Я ответил в соответствии с вопросом, заданным владельцем сообщения. Пусть он попробует и посмотрит, решается ли его проблема или нет.

Ответ №2:

 public Check {
  int value;
  int index;
  boolean match;
  // constructor, setters and getters
}
  

Для получения примерно всей необходимой информации:

 public List<Check> checkValues(List<Integer> originalList, Integer testValue) {
  List<Check> result = new ArrayList<>();
  for ( int i = 0; i< originalList.size(); i   ) {
    result.add(new Check(i, originalList.get(i), originalList.get(i) == testValue);
  }
  return resu<
}
  

Это «способ» сделать это. У вас будет информация о том, сколько совпадений было, какие другие значения были и по какому индексу в вашем списке они были найдены.

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

1. Мне действительно нужно создавать класс модели?

2. вам «нужно» ничего не делать, но в зависимости от того, что вы хотите получить в результате, или что, где и как вы хотите использовать из результатов, вы можете. это зависит от вашего варианта использования, если вам просто нужно напечатать значение, нет, оно вам вообще не нужно, если вам нужна информация для последующей обработки, вам понадобится способ ее сохранения

3. @Joshua сделал этого достаточно, чтобы помочь вам дальше, или вам нужно что-то еще?

4. Для меня, как для новичка, сложно использовать класс model

5. Есть какой-нибудь другой способ сделать это проще??

Ответ №3:

Я бы использовал Java Streams, подробнее читайте в разделе: Streams

По сути, список превращается в поток элементов, а затем вы можете обрабатывать данные.

 //To get only the elements equal to 1
sampleList.stream()
  .filter((num) -> num == 1);

//to get a list of booleans whose value depends on the element being equal to 1.
List<Boolean> listBooleans = sampleList.stream()
  .map((num) -> num == 1)
  .collect(Collectors.toList())
  
  • фильтр использует предикат, чтобы определить, соответствует ли элемент определенному условию, в данном случае number == 1.
  • map преобразует поток целых чисел в поток логических значений, где результатом является число == 1.
  • collect завершает поток с помощью Коллекторов.ToList преобразует его в Список.

Надеюсь, это поможет.

Ответ №4:

 Arraylist<String> matchedValues = new Arraylist<>();
String editTextValue = edittext.getText();
String arrayValue;
boolean isEqual ;
boolean isEveryElementPresent = false;
for (int i = 0 ; i < sampleList.size() ; i  ){
    arrayValue = sampleList.get(i);
    if(arrayValue.equals(editTextValue)){
        isEqual = true;
        matchedValues.add(arrayValue);
    }else{
        isEqual =false;
    }
}

if(matchedValues.size() == sampleList.size()){
        isEveryElementPresent = true;
}
  

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

1. Я могу выявить одну проблему с эффективностью и одну серьезную проблему с вашим кодом, почему он не будет работать. какова связь с результатом вашего кода и значением последнего элемента массива?

2. @Stultuske Не могли бы вы, пожалуйста, вкратце рассказать мне о проблеме??

3. вы получите результат только для конечного элемента массива. если это значение равно значению, с которым вы хотите его проверить, оно возвращает ‘true’. вы не сохраняете информацию о предыдущих элементах, вы перезаписываете ее каждый раз. Таким образом, вы даже не узнаете, были ли в массиве другие значения, если только последний элемент не отличается.

4. Сохраняйте индексы всякий раз, когда вы присваиваете isEqual значение true

5. @BhavikParmar как помогает ваше улучшение? единственное отличие заключается в том, что вы сможете проверить, сколько элементов было равно исходному тексту