Для каждого L oop с ArrayList - PullRequest
       18

Для каждого L oop с ArrayList

1 голос
/ 16 февраля 2020

В приведенном ниже коде, как получается, что во внутреннем для For каждого l oop мы можем создать переменную типа int из переменной, которую мы создали во внешнем для каждого l oop типа List? Тем не менее, если мы пытаемся создать эту переменную примитивного типа int, возникает ошибка. Не могу понять, как мы можем создать переменную For Each типа int из userAge, но не из userAges.

   List <List<Integer>> userAges = new ArrayList<List<Integer>>();

    userAges.add(Arrays.asList(51, 48, 21));
    userAges.add(Arrays.asList(33, 51, 19));
    userAges.add(Arrays.asList(39, 47, 58));

    for (List<Integer> userAge : userAges)
    {
        for (int age : userAge)
        {
            System.out.print(age + " ");
        }
        System.out.println();
    }

Ответы [ 2 ]

3 голосов
/ 16 февраля 2020

Java будет автоматически снимать с ящика классы-примитивы в их примитивном эквиваленте, поэтому, учитывая

List<Integer> userAge; // what the outer loop provides to the inner loop

Мы можем написать либо:

for (Integer age : userAge)

или:

for (int age : userAge)

В более общем смысле, учитывая:

Integer integer;

Мы можем написать:

int i = integer;

Прочитать полную спецификацию здесь .

0 голосов
/ 16 февраля 2020

Не могу понять, как мы можем создать переменную For Each типа int из userAge, но не из userAges.

userAges - это список списков, и поэтому в внешний for l oop, список назначен на userAge; и не Integer. Integer автоматически распаковывается при назначении переменной int (также, int получает автоматическую коробку при назначении переменной Integer). Но список нельзя присвоить переменной Integer или int. Вот почему вы не можете создать переменную типа int или Integer из userAges; вы можете создать переменную типа List только из userAges.

Поскольку каждый userAge представляет список целых чисел, вы можете выполнить итерацию userAge и назначить содержащиеся в ней целые числа переменной типа , Integer или int, что составляет age во внутреннем l oop вашего вопроса.

Надеюсь, это поможет. Не стесняйтесь комментировать в случае каких-либо сомнений.

...