преобразовать данные массива из объекта / float в int для использования в методе

1

У меня есть класс в классе, в котором я храню номер. Метод в классе, который добавляет данные в 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, чтобы показать выбор меню

Теги:
arraylist

2 ответа

2
Лучший ответ

Есть несколько способов решения этого, один прямой подход будет следующим:

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]
  • 0
    это выглядит как хороший путь для подражания, хотя я думаю, что все значения будут храниться как float (потому что метод, который добавляет данные в arraylist, параметр - это float), но ваш код будет работать независимо. спасибо я попробую использовать это
  • 0
    Просто чтобы обновить, первый код выше, с некоторыми изменениями, сработал идеально для меня, спасибо slartidan
0

Подобное решение для 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню