Массив поиска для указанного c параметра Java - PullRequest
0 голосов
/ 18 июня 2020

У меня есть массив, содержащий объекты свойств. эти объекты имеют номер листинга, имя String и год int.

Когда я ввожу случайный номер листинга, я хочу проверить массив, чтобы увидеть, существует ли этот номер листинга, а затем, если он существует, я хочу чтобы удалить это свойство

Я не уверен, как получить доступ к объекту массива, чтобы получить номер листинга

это то, что у меня есть до сих пор

public class Property {

//primary fields
private String listingNumber;

}


public Property(String listingNumber) {

    this.listingNumber = listingNumber;

}

Класс с массив

private Property[] properties;

называется SalesAgent

public SalesAgent(String company) {

    this.company = company;

    this.properties = new Property[]{};
}

public void removeProperty(String listingNumber) {

    if(listingNumber != null){

        boolean found = false;
        for(int ndx = 0; ndx < this.properties.length && !found; ndx++) {


            if(getListingNumber() == listingNumber) {

            properties[ndx] = null;
            found = true;
        }

    }
}

Ответы [ 3 ]

1 голос
/ 18 июня 2020

Вы должны использовать equals вместо ==

0 голосов
/ 18 июня 2020

Если вы хотите удалить Property из списка, вам нужно что-то с переменным размером. Массив имеет фиксированный размер, поэтому лучше использовать List.

Предполагая, что properties равно List<Property>, вы можете написать что-то вроде этого:

int foundIndex = -1;
for (int i = 0; i < properties.size(); i++) {
    if (Objects.equals(properties.get(i).getListingNumber(), listingNumberToFind)) {
        foundIndex = i;
        break;
    }
}
if (foundIndex != -1) {
    properties.remove(foundIndex);
}

Он начинает обход списка с Property объектами, и если объект со строкой листинга найден, то захватывает его индекс и останавливается. Если такой индекс найден, удалите объект с этим индексом из списка.

Этого также можно добиться с помощью Java 8 потоков:

properties = properties.stream()
   .filter(p -> !Objects.equals(p.getListingNumber(), listingNumberToFind))
   .collect(Collectors.toList());

Несколько примечаний:

  • removeProperty не принадлежит к классу Property. Класс Sales содержит список со свойствами, поэтому он, вероятно, должен находиться там.

  • Вам следует всегда сравнивать String s с методом equals . Для ссылочных типов (а это String), == сравнивает идентичность объектов, а не их значение. Я использовал метод stati c Objects.equals, который использует equals под капотом.

  • Если вы часто просматриваете такой номер листинга, вы можете использовать Map , сопоставление номеров списков с соответствующими объектами Property:

    Map<String, Property> properties = new HashMap<>();
    // Put your values into the map
    properties.put(«listingNumber», «property»);
    ...
    
    properties.remove(listingNumber);
    
0 голосов
/ 18 июня 2020

Несколько моментов, которые я хотел бы указать в вашем коде.

  1. setListingNumber() == null; - неправильный способ установки нулевого значения / удаления значения в java. Это должна быть функция-установщик, принимающая аргумент. Вы можете передать аргумент.
  2. Здесь вы можете использовать оператор break. Если ваше условие удовлетворено, вы можете прервать выполнение l oop и остановить выполнение l oop с этого шага.

    Class Property { 
    
      public void removeProperty(String listingNumber) {
         if(listingNumber != null){
             for(int ndx = 0; ndx < this.properties.length; ndx++) {
                if(getListingNumber() == listingNumber) {
                    setListingNumber(null);
                        break;
                }
           }
       }
       public void setListingNumber(String listingNumber){
             this.listingNumber = listingNumber;
       }
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...