Как получить объект с фиксированной строкой из массива в Java?

#java #android #arrays #object

#java #Android #массивы #объект

Вопрос:

У меня есть массив объектов, длина которых может изменяться динамически, но максимальное значение всегда равно 8. У каждого объекта есть фиксированная строка, которая его описывает, например:

 array.get(0).getString() = apple
array.get(1).getString() = blueberry
array.get(2).getString() = banana
array.get(3).getString() = cherry
array.get(4).getString() = coconut
array.get(5).getString() = grapefruit
array.get(6).getString() = lemon
array.get(7).getString() = orange
  

В зависимости от того, сколько объектов и какой тип строки я получаю из api, я хочу скрыть или показать представление. В настоящее время я использую оператор switch, подобный этому:

 if (array.toArray().length == 1) {

        switch (array.get(0).getString()) {
            case "apple":
                ...
                break;
            case "blueberry":
                ...
                break;
            case "banana":
                ...
                break;
            case "cherry":
                ...
                break;
            case "coconut":
                ...
                break;
            case "grapefruit":
                ...
                break;
           case "lemon":
                ...
                break;
            case "orange":
                ...
                break;

        } else if (array.toArray().length == 2) {

              switch (array.get(0).getString()) {
              ...
              }

              switch (array.get(1).getString()) {
              ...
              }
        }
  

Я делаю это 8 раз, и каждый раз мне приходится добавлять новый оператор switch. Есть ли способ упростить это?

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

1. Просто придирка, но «грейпфрут» состоит из 10 символов.

2. Почему бы и нет, array.size() а не array.toArray().length ?

3. Вам разрешено использовать операторы switch длиной более 8 элементов.

Ответ №1:

Вы можете использовать циклы и вы можете использовать Map, чтобы избежать операторов switch.

 List<YourCustomObject> arr = getObjectsFromAPI();
Map<String, Boolean> fruitVisibility = new HashMap<>();
fruitVisibility.put("apple", true); // Let' say apple is visible
fruitVisibility.put("orange", false); // Orange is not visible
// ..... and so on

for(YourCustomObject obj : arr){
  if(fruitVisibility.containsKey(obj.getString()))
     view.setVisible(fruitVisibility.get(obj.getString()));
}
  

Или вы можете использовать способ, который вы пытаетесь сделать.

 for(int i=0; i<array.size(); i  ){
  switch(array.get(i).getString()){
    //    case ..
    // ....
  }
}
  

Ответ №2:

вы можете использовать итераторы, вроде приведенных ниже:

  Iterator iterator = list.iterator();
  while(iterator.hasNext()) {
     System.out.println(iterator.next());
  }