#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());
}