Преобразование массива int в коллекции

1

Я изучаю Java шаг за шагом. Теперь я знаю до массивов, а затем - Коллекции.

Поскольку я изучаю основываясь на проектах, я заметил, что большинство программистов предпочитают использовать Collections а не простые массивы, чтобы исключить циклы и использовать предопределенные функции (например, sort и многое другое). Итак, сначала я пытаюсь преобразовать int[] в Collection. Но я получаю ошибку в цикле foreach...

import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class Coll {

    public static void main(String[] args) {
        Coll obj = new Coll();
        obj.op();
    }

    void op() {
        System.out.println("To convert Array to Collections");
        Scanner getinp = new Scanner(System.in);
        System.out.println("Enter the size of array : ");
        int siz = getinp.nextInt();
        int[] arry = new int[siz];
        System.out.println("Enter the values of elements");
        for (int i = 0; i < arry.length; i++) {
            System.out.println("arry[" + i + "] : ");
            arry[i] = getinp.nextInt();
        }

        List arrycoll = Arrays.asList(arry);
        for (String elem : arrycoll) {
            System.out.println(elem);
        }
    }
}

Ошибка указана в следующей строке:

for(String elem : arrycoll) 

Указывая на arrycoll, в нем говорится:

required 'String' but found 'Object'

Если я определяю arry как String и сохраняю String s, это не будет ошибкой, но для int он не работает.

  • 2
    Используйте дженерики .. List<Integer> . Кроме того, вы вставляете целое число и пытаетесь вернуть строку ...
  • 1
    Arrays фактически поддерживают sort .
Показать ещё 1 комментарий
Теги:
arrays
collections

4 ответа

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

Учитывая это сообщение

он утверждает, что требуется String, но найден объект

Вы получаете две важные части информации. Во-первых, вы используете String для элементов вашего int[]. И два, у вас есть необработанный тип (поэтому ваши элементы Integer рассматриваются как элементы Object). Не используйте Raw Types ! Я уверен, что вы хотели что-то вроде

List<Integer> arrycoll = Arrays.asList(arry);
for(Integer elem:arrycoll) { // <-- Integer, not String.
  System.out.println(elem);
}

редактировать

Конечно, для работы с коллекцией вам понадобится объект. int имеет тип оболочки Integer, поэтому вам нужно будет изменить

int[] arry=new int[siz];

в

Integer[] arry=new Integer[siz];
  • 3
    Теперь вы получите эту ошибку компилятора по адресу: Arrays.asList(arry) . Несоответствие типов: невозможно преобразовать из List <int []> в List <Integer>
  • 0
    спасибо .. изменение его на Integer Arry от Int Arry работает, и после создания его в виде списка, Collections.reverse (arrycoll) работает нормально .. Но что такое различие ч / б использования Integer и int .. С самого начала я целое число - это расширение, а int - ключевое слово для определения типа данных в программе. @Elliott Frisch
Показать ещё 2 комментария
0

требуется String но найден Object

В вашем для каждого цикла вы используете String как тип для элемента, тогда как arrycoll - это список ссылок исходного списка, тип которых - Object.

List arrycoll

Вы указали список ссылок на исходный список. Вы должны сообщить компилятору, что они будут List<Integer> values:

List<Integer> arrycoll

а также

  1. используйте Integer вместо String для elem

  2. Заменить int[] arry = new int[siz]; с Integer [] arry = new Integer [siz];

Следовательно, код станет:

        Integer[]  arry = new Integer[siz];

        List<Integer> arrycoll = Arrays.asList(arry);
        for (Integer elem : arrycoll) {
            System.out.println(elem);
        }
  • 1
    Это не сработает, потому что Arrays.asList(arry); по-прежнему возвращает список этого типа: List<int[]>
  • 0
    Ага. это работает .. спасибо .. Но я не могу сделать ваш, как принято, потому что Эллиотт опубликовал ответ первым ..
Показать ещё 1 комментарий
0

Нет проблем!

  1. Измените список на список, который теперь будет статичным, чтобы объекты в списке были целыми (в общем, все они рассматриваются как целые)

  2. Замените String на Integer, так как теперь все объекты в списке имеют тип Integer (не String или что-то еще)

  • 0
    Это не сработает.
0

Только для печати, просто попробуйте это; литье как int[]

List arrycoll = Arrays.asList(arry);
for (Object elem : arrycoll) {

    int[] iArr1 = (int[]) elem;     
    for (int i : iArr1) {
        System.out.println(i);
    }
}

Ещё вопросы

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