У меня есть класс в классе, в котором я храню номер. Метод в классе, который добавляет данные в arraylist, принимает один параметр float - это потому, что некоторые из данных являются float, а некоторые - целыми.
Мне нужно извлечь некоторые данные с помощью метода и преобразовать его в Int, но не могу решить, как это сделать. Ive попробовал разные кастинга и т.д., Но поскольку это объекты в arraylist, я не могу заставить его работать.
(Так что, если это не слишком ясно, я был на этом в течение 8 часов подряд, так что мозг немного обжарен сейчас)
Например, arraylist называется subjectResults и Ive пытался:
numberOfA = (Integer)subjectsResults.get(1);
где numberOfA - Int (я знаю, где индекс также относится к данным), поэтому я напрямую ссылаюсь 1)
Ive попытался использовать toString и parseInt, и вот так:
numberOfA = (Integer.parseInt((String)subjectsResults.get(1)));
Как я могу добиться этого - мне нужно извлечь номер из индекса (1) для использования в инструкции switch/case, чтобы показать выбор меню
Есть несколько способов решения этого, один прямой подход будет следующим:
Object value = subjectsResults.get(1);
if (value instanceof Integer) {
numberOfA = (Integer) value;
} else if (value instanceof Float) {
numberOfA = ((Float) value).intValue();
} else {
handle this unusual case
}
Еще более разумное решение - использовать общий Number
Суперкласса. Оба Integer
и Float
являются подклассами Number
- и поэтому они совместно используют метод intValue()
.
import java.util.ArrayList;
import java.util.List;
public class Snippet {
public static void main(String[] args) {
// define test data
List<Number> subjectsResults = new ArrayList<>();
subjectsResults.add((int) 50);
subjectsResults.add((float) 33.333f);
// create target list
List<Integer> subjectsNumbers = new ArrayList<>();
// iterate over input
for (Number number : subjectsResults) {
// use method "intValue", which is available for all "Number"-objects
subjectsNumbers.add(number.intValue());
}
System.out.println(subjectsNumbers);
}
}
Выход в консоли:
[50, 33]
Подобное решение для slartidan, за исключением того, что мне не нравится проверка типов, поэтому будет использовать генерики.
public class FloatAndInt {
private static <T extends Number> void addItemToArray(final T item,final List numberList) {
numberList.add(item);
}
private static void iterateArrayList(final List<Number> numberList) {
for (Number n:numberList) {
System.out.println(n.intValue());
}
}
public static void main(String args[]) {
List<Number> numberList = new ArrayList<Number>();
addItemToArray(2,numberList);
addItemToArray(4.3f,numberList);
//addItemToArray(Long.MAX_VALUE, numberList);
//addItemToArray(Double.MAX_VALUE, numberList);
iterateArrayList(numberList);
}
}
Вывод:
2
4