Как в java найти нулевой элемент

Условие такое: если строки двух массивов совпадают k=1; если нет и в нем есть нулевой элемент k=max; если нет и нет нулевых элементов k=min.Ругается только на строчку else if (b[i]==0)

int k = 0;
int A[]=new int[n];
for(int i=0;i<b.length;i++) {
    int [] second = new int [b[i].length];
    for(int j=0;j<b[i].length;j++)
        second[j]=b[i][j];

    Arrays.sort(second);
    int min = second[0];
    int max = second[second.length-1];

    if((b[i][k]==b[i][k+1])&&(b[i][k+1] == b[i][k+2]))
        Arrays.fill(b[i],0);
    if(Arrays.equals(b[i],second)) {
        A[i]=1;

    }

    else if (b[i] == 0) {
        A[i]=max;
    }
    else 
        A[i]=min;
    System.out.println("A[" + (i+1) + "] = " + A[i]);
}

задан 17 апр 2020 в 11:00

Александр's user avatar

1

Элементами первого уровня массива b являются массивы, а Вы пытаетесь сравнить один из них с нулем.

ответ дан 17 апр 2020 в 11:33

I want to check whether an Array element is null.

I have initialized an array of String which has a size of 2. I looped through the array and check whether an array element is null. If it’s null, I will add a String “a” to that position only.

My codes below will produce the following output:

1=a
2=a

Code:

public class CheckArrayElementIsNull {
    public static void main(String[] args) {
        String[] arr = new String[2];       
        for(int i = 0; i < arr.length; i++) {
            if(arr[i] == null) {
                arr[i] = "a";
            }
            System.out.println(i + "=" + arr[i]);   
            if(arr[i] == null) {
                System.out.println(i + "= null");
            }
        }
    }
}

I tried to add a break after my if condition but is not printing out anything.

 public class CheckArrayElementIsNull {
    public static void main(String[] args) {
        String[] arr = new String[2];       
        for(int i = 0; i < arr.length; i++) {
            if(arr[i] == null) {
                arr[i] = "a"; 
                break;
            }
            System.out.println(i + "=" + arr[i]);   
            if(arr[i] == null) {
                System.out.println(i + "= null");
            }
        }
    }
}

I expected this output:

1=a
2=null

asked Aug 26, 2014 at 8:44

tz reur's user avatar

3

You have a few problems in your loop.

    for(int i = 1; i < arr.length - 1; i++) { //<---- This does not iterate over the entire array, leaving out the first and last elements
        if(arr[i] == null) {
            arr[i] = "a"; 
            break; //<---- This terminates the loop entirely, if you want to stop all instructions past this one try using continue instead
        }
        System.out.println(i + "=" + arr[i]);   
        if(arr[i] == null) { //This code is unreachable as arr[i] is initialized if it was detected as null before
            System.out.println(i + "= null");
        }else{
            System.out.println(i + "=" + arr[i]); 
        }
    }

Instead you should try

 for(int i = 0; i < arr.length; i++) {
    if(arr[i] == null) {
        arr[i] = "a";
        System.out.println(i + "= null");
        break;
    }
    System.out.println(i + "=" + arr[i]); 
}

answered Aug 26, 2014 at 8:49

Dragondraikk's user avatar

DragondraikkDragondraikk

1,65911 silver badges21 bronze badges

6

It is because break will break the iteration of the for loop, and exit out of loop immediately. You should change your design a bit. From what I understand you are trying to achieve (Assigning “a” to the first null element encountered and stop, print all elements in the array) following should work:-

public class CheckArrayElementIsNull {

  public static void main(String[] args) {
     String[] arr = new String[3];       
     boolean flag=true; //use a flag that will check if null is encountered
     for(int i = 0; i < arr.length; i++) {
       if(arr[i] == null && flag) { // first time flag will be true
         arr[i] = "a"; 
         flag=false; //set flag to false , to avoid further assignment of 'a' to null values
        }
        System.out.println(i + "="+ arr[i]);    //print array
        }
     }
  }

answered Aug 26, 2014 at 8:56

Mustafa sabir's user avatar

Mustafa sabirMustafa sabir

4,1301 gold badge19 silver badges28 bronze badges

2

Try assigning the value at the index you expect not to be null before you enter your for loop:

String[] arr = new String[3];
arr[1] = "a";
for (int i = 0; i < arr.length; i++)
{
  if (arr[i] == null)
  {
    System.out.println(i + "=null");
  }
  else
  {
    System.out.println(i + "=" + arr[i]);
  }
}

answered Aug 26, 2014 at 8:54

Stefan's user avatar

StefanStefan

1,4331 gold badge19 silver badges30 bronze badges

В примитивных vs ссылочных типах

An int – это примитивный тип, который отличается от ссылочного типа. Только ссылочные типы могут иметь значение null.

Ссылки

  • JLS 4.2 Примитивные типы и значения
  • JLS 4.3 Типы ссылок и значения

Связанные вопросы

  • Является ли Java полностью объектно-ориентированным?
  • Является ли объектно-ориентированная Java на 100%?

Вкл Integer vs int

java.lang.Integer – фактически ссылочный тип, обозначенный тип “box” для примитивного типа int. Таким образом, переменная Integer может иметь значение null.

С введением автобоксинга в Java конверсии от int до Integer и наоборот могут выполняться неявно. Но имейте в виду, что они очень разные типы, и на самом деле попытка unbox null будет бросать NullPointerException.

Ссылки

  • Руководство по языку Java/Автобоксинг
  • JLS 5.1.7 Конверсия бокса

Связанные вопросы

  • В чем разница между int и Integer в Java/С#?
  • Почему автобоксинг в Java позволяет мне иметь 3 возможных значения для логического?

По последствиям Integer является ссылочным типом

Уже упоминалось одно последствие: переменная Integer может иметь значение null. Другим является то, что оператор == на двух Integer является сравнительным сопоставлением идентичности, а не численным равенством.

System.out.println(new Integer(0) == new Integer(0)); // prints "false"

По возможности, вы должны предпочесть примитивные типы для типов в штучной упаковке. Здесь цитата из Effective Java 2nd Edition, пункт 49: Предпочитают примитивные типы для вложенных в примитив примитивов (выделение автором):

В общем, используйте примитивы, предпочитая вложенные в бокс примитивы, когда у вас есть выбор. Примитивные типы проще и быстрее. Если вы должны использовать примитивы в штучной упаковке, будьте осторожны! Автобоксинг уменьшает многословие, но не опасность использования примитивов в штучной упаковке. Когда ваша программа сравнивает два бокс-примитива с оператором ==, он сопоставляет личность, что почти наверняка не то, что вы хотите. Когда ваша программа выполняет смешанные вычисления с использованием примитивов с боксами и unboxed, она делает unboxing и , когда ваша программа распаковывается, она может бросать NullPointerException. Наконец, когда ваши программные коды приносят примитивные значения, это может привести к дорогостоящим и ненужным созданиям объектов.

Связанные вопросы

  • Гарантируется ли, что новый Integer (i) == я в Java?
    • Подробнее идет о том, как == ведет себя для операндов Integer и int

Если Integer необходимо использовать

Существует одно вопиющее исключение, где Integer должно использоваться над int: generics. Параметры типа в Java-дженериках должны быть ссылочными типами. Таким образом, вы не можете List<int> в Java; вы должны использовать List<Integer>.

Связанные вопросы

  • Java noob: генерические файлы только по объектам?

См. также

  • Учебники по Java/общие сведения

При использовании соответствующей структуры данных

Если у вас должен быть int[], который допускает значения null, то быстрый ответ заключается в использовании Integer[]. Поскольку теперь у вас есть массив ссылочных типов, некоторые элементы могут быть null. Имейте в виду все последствия работы со ссылочными типами, или вы можете столкнуться с неожиданностями.

В этот момент, однако, я бы серьезно подумал об использовании List<Integer> вместо этого (см. “Эффективное Java 2nd Edition: предпочтительные списки для массивов” ). Списки гораздо более функциональные, чем массивы, и хорошо взаимодействуют с более крупной платформой коллекций Java.

Ссылки API

  • java.util.List
  • Руководство по Framework коллекций Java

Не пойму две вещи.

1. Как мне сначала вернуть нулевой элемент в методе pop, и потом удалить? Это же unreachable statement получается.
2. Что валидатору не нравится в методе empty()?

package com.javarush.task.pro.task14.task1415;

import java.util.ArrayList;
import java.util.List;

/*
Стек в домашних условиях
*/

public class MyStack {

private final List<String> storage = new ArrayList<>();

public void push(String s) {
storage.add(0, s);
//напишите тут ваш код
}

public String pop() {
return storage.get(0);
//напишите тут ваш код
}

public String peek() {
return storage.get(0);
//напишите тут ваш код
}

public boolean empty() {
return storage.isEmpty();
//напишите тут ваш код
}

public int search(String s) {
return storage.indexOf(s);
//напишите тут ваш код
}
}

Этот веб-сайт использует данные cookie, чтобы настроить персонально под вас работу сервиса. Используя веб-сайт, вы даете согласие на применение данных cookie. Больше подробностей — в нашем Пользовательском соглашении.

Интерфейс Java List, java.util.List, представляет упорядоченную последовательность объектов. Элементы, содержащиеся в списке Java, могут быть вставлены, повторены и удалены в соответствии с порядком их появления в нем. Порядок элементов – вот почему эта структура данных называется списком.

Каждый элемент имеет индекс: первый элемент – 0, второй – 1 и т. д. Индекс означает «сколько элементов находится в начале». Таким образом, первый элемент находится на расстоянии 0 элементов от начала списка, потому что он находится в начале.

Вы можете добавить любой объект в список. Если он не типизирован с использованием Java Generics, то вы можете даже смешивать объекты разных типов (классов) в одном и том же списке. Однако на практике это происходит не часто.

Интерфейс List является стандартным интерфейсом и подтипом интерфейса Collection, что означает, что List наследуется от Collection.

List против Set

Интерфейсы List и Set очень похожи в том, что они оба представляют коллекцию элементов. Тем не менее, есть некоторые существенные различия, отраженные в методах, предлагаемых интерфейсами:

  1. Один и тот же элемент может встречаться в списке более одного раза. Это отличается от набора, где каждый элемент может встречаться только один раз.
  2. Элементы в List имеют порядок, и могут повторяться в этом порядке. Набор не дает никаких обещаний относительно порядка элементов, хранящихся внутри.

Реализации

Будучи подтипом Collection, все методы в интерфейсе Collection также доступны в интерфейсе List.

Поскольку List – это интерфейс, вам нужно создать конкретную реализацию интерфейса, чтобы использовать его, либо выбрать между следующими в API коллекций:

  • java.util.ArrayList;
  • java.util.LinkedList;
  • java.util.Vector;
  • java.util.Stack.

Также есть параллельные реализации в пакете java.util.concurrent.

Вот несколько примеров того, как создать экземпляр List:

List listA = new ArrayList();
List listB = new LinkedList();
List listC = new Vector();
List listD = new Stack();

Как вставить элементы

Вы вставляете элементы (объекты) в список, используя его метод add():

List listA = new ArrayList();

listA.add("element 1");
listA.add("element 2");
listA.add("element 3");

Первые три вызова add() добавляют экземпляр String в конец списка.

Как вставить нулевые значения

Вот пример:

Object element = null;

List list = new ArrayList();

list.add(element);

Как вставить элементы по определенному индексу

Можно вставить элемент в список по определенному индексу. Интерфейс List имеет версию метода add(), которая принимает индекс в качестве первого параметра, и элемент для вставки в качестве второго:

list.add(0, "element 4");

Если список уже содержит элементы, они теперь будут перемещены дальше во внутренней последовательности списка. Элемент, который имел индекс 0 до того, как новый элемент был вставлен в индекс 0, будет перемещен в индекс 1 и т. д.

Как вставить все элементы из одного списка в другой

Сделать это можно с помощью метода List addAll(). Результирующий список представляет собой объединение двух. Вот пример:

List listSource = new ArrayList();

listSource.add("123");
listSource.add("456");

List listDest   = new ArrayList();

listDest.addAll(listSource);

В этом примере все элементы из listSource добавляются в listDest. Метод addAll() принимает коллекцию в качестве параметра, поэтому вы можете передать в качестве параметра список или набор. Другими словами, можете добавить все элементы из списка или набора с помощью addAll().

Как получить элементы

Для этого используется индекс элементов, а также метод get(int index):

List listA = new ArrayList();

listA.add("element 0");
listA.add("element 1");
listA.add("element 2");

//access via index
String element0 =(String) listA.get(0);
String element1 =(String) listA.get(1);
String element3 =(String) listA.get(2);

Также возможно итерировать элементы списка в том порядке, в котором они хранятся внутри.

Как найти элементы

Используется один из этих двух методов:

  • indexOf();
  • LastIndexOf().

Метод indexOf() находит индекс первого вхождения в списке заданного элемента:

List list = new ArrayList();

String element1 = "element 1";
String element2 = "element 2";

list.add(element1);
list.add(element2);

int index1 = list.indexOf(element1);
int index2 = list.indexOf(element2);

System.out.println("index1 = " + index1);
System.out.println("index2 = " + index2);

Запуск этого кода приведет к следующему выводу:

index1 = 0
index2 = 1

Как найти последнее вхождение элемента в списке

Метод lastIndexOf() находит индекс последнего вхождения в списке данного элемента:

List list = new ArrayList();

String element1 = "element 1";
String element2 = "element 2";

list.add(element1);
list.add(element2);
list.add(element1);

int lastIndex = list.lastIndexOf(element1);
System.out.println("lastIndex = " + lastIndex);

Выходные данные, напечатанные при запуске приведенного выше примера, будут следующими:

lastIndex = 2

Элемент 1 элемент встречается 2 раза в списке. Индекс последнего появления равен 2.

Проверка, содержится ли элемент

Используется метод List contains():

List list = new ArrayList();

String element1 = "element 1";

list.add(element1);

boolean containsElement =
    list.contains("element 1");

System.out.println(containsElement);

Результатом выполнения этого примера будет:

true

… потому что список действительно содержит элемент.

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

Поскольку можно добавить нулевые значения в список, фактически можно проверить, содержит ли он их:

list.add(null);

containsElement = list.contains(null);

System.out.println(containsElement);

Очевидно, что если входной параметр для contains() имеет значение null, метод contains() не будет использовать метод equals() для сравнения с каждым элементом, а вместо этого использует оператор ==.

Как удалить элементы

Вы можете удалить элементы с помощью этих двух методов:

  • remove(Object element);
  • remove(int index).

remove(Object element) удаляет этот элемент в списке, если он присутствует. Все последующие элементы затем перемещаются вверх по списку. Таким образом, их индекс уменьшается на 1. Вот пример:

List list = new ArrayList();

String element = "first element";
list.add(element);

list.remove(element);

Этот пример сначала добавляет элемент в список, а затем снова удаляет его.

Метод remove(int index) удаляет элемент по указанному индексу. Все последующие элементы в списке затем перемещаются вверх. Таким образом, их индекс уменьшается на 1. Вот пример:

List list = new ArrayList();

list.add("element 0");
list.add("element 1");
list.add("element 2");

list.remove(0);

После запуска этого примера кода список будет содержать элементы 1 и 2 элемента Java String с индексами 0 и 1. Первый элемент (элемент 0) был удален из списка.

Как удалить все элементы

Интерфейс List содержит метод clear(), который удаляет все элементы из списка при вызове. Также называется очисткой списка. Вот простой пример:

List list = new ArrayList();

list.add("object 1");
list.add("object 2");
//etc.

list.clear();

Сначала создается новый список. Во-вторых, два элемента добавляются в список. В-третьих, вызывается метод clear(). После вызова метода clear() список будет полностью пустым.

Как сохранить все элементы из одного списка в другом

Интерфейс Java List имеет метод retainAll(), который способен сохранять все элементы из одного списка, которые также присутствуют в другом списке. Другими словами, метод retain() удаляет все элементы из целевого списка, которые не найдены в другом списке. Полученный список является пересечением двух списков. Вот Java-пример вызова метода List retainAll():

List list      = new ArrayList();
List otherList = new ArrayList();

String element1 = "element 1";
String element2 = "element 2";
String element3 = "element 3";
String element4 = "element 4";

list.add(element1);
list.add(element2);
list.add(element3);

otherList.add(element1);
otherList.add(element3);
otherList.add(element4);

list.retainAll(otherList);
  • Первые два списка созданы.
  • 3 элемента добавляются в list, а 3 элемента в otherList.
  • Метод retainAll() вызывается, передавая otherList в качестве параметра. После того, как list.retainAll(otherList) завершит выполнение, список будет содержать только те элементы, которые присутствовали как в list, так и otherList до вызова retainAll(). Более конкретно, это element1 и element3.

Размер

Вы можете получить количество элементов, вызвав метод size():

List list = new ArrayList();

list.add("object 1");
list.add("object 2");

int size = list.size();

Подсписок

Интерфейс List имеет метод subList(), который может создавать новый List с подмножеством элементов из исходного List.

Метод subList() принимает 2 параметра:

  1. Начальный индекс – это индекс первого элемента из исходного списка для включения в подсписок.
  2. Конечный индекс является последним индексом подсписка, но элемент в последнем индексе не включается в подсписок.

Это похоже на то, как работает метод подстроки Java String. Вот пример:

List list      = new ArrayList();

list.add("element 1");
list.add("element 2");
list.add("element 3");
list.add("element 4");

List sublist = list.subList(1, 3);

После выполнения инструкции list.subList(1,3) подсписок будет содержать элементы с индексами 1 и 2. Помните, что исходный список содержит 4 элемента с индексами от 0 до 3. Вызов list.subList(1,3) будет включить индекс 1, но исключить индекс 3, тем самым сохраняя элементы с индексами 1 и 2.

Как преобразовать в набор

Вы можете преобразовать в набор, создав новый набор и добавив в него все элементы из списка. При этом удалятся все дубликаты. Таким образом, результирующий набор будет содержать все элементы списка, но только один раз. Вот пример:

List list      = new ArrayList();

list.add("element 1");
list.add("element 2");
list.add("element 3");
list.add("element 3");

Set set = new HashSet();
set.addAll(list);

Обратите внимание, что список содержит элемент String 3 два раза. Набор будет содержать эту строку только один раз. Таким образом, результирующий набор будет содержать элемент Strings 1, элемент 2 и элемент 3.

Как преобразовать в массив

Вы можете выполнить это с помощью метода List toArray():

List list      = new ArrayList();

list.add("element 1");
list.add("element 2");
list.add("element 3");
list.add("element 3");

Object[] objects = list.toArray();

Также возможно преобразовать в массив определенного типа:

List list      = new ArrayList<>();

list.add("element 1");
list.add("element 2");
list.add("element 3");
list.add("element 3");

String[] objects1 = list.toArray(new String[0]);

Обратите внимание, что даже если мы передадим массив String размером 0 в toArray(), в возвращенном массиве будут все элементы списка. Он будет иметь то же количество элементов, что и список.

Как конвертировать массив в список

Вот пример:

String[] values = new String[]{ "one", "two", "three" };

List list = Arrays.asList(values);

Это метод Arrays.asList(), который преобразует массив в список.

Общие

По умолчанию вы можете поместить любой объект в список, но из Java 5 Generics позволяет ограничить типы объектов, которые вы можете вставить. Вот пример:

List list = new ArrayList();

Этот список теперь может содержать только экземпляры MyObject. Затем вы можете получить доступ к элементам и выполнить итерацию без их приведения:

MyObject myObject = list.get(0);

for(MyObject anObject : list){
   //do someting to anObject...
}

Как сортировать

Вы можете отсортировать с помощью метода Collections sort().

Сортировка сопоставимых объектов

Если список содержит объекты, которые реализуют интерфейс Comparable(java.lang.Comparable), то эти объекты могут сравнивать себя друг с другом. В этом случае вы можете отсортировать следующим образом:

List list = new ArrayList();

list.add("c");
list.add("b");
list.add("a");

Collections.sort(list);

Класс Java String реализует интерфейс Comparable, вы можете сортировать их в естественном порядке, используя метод Collections sort().

Сортировка с помощью компаратора

Если объекты в списке не реализуют интерфейс Comparable или если вы хотите отсортировать объекты в другом порядке, чем их реализация compare(), вам необходимо использовать реализацию Comparator(java.util.Comparator). Вот пример сортировки списка объектов Car с использованием Comparator.

Первый класс автомобилей:

public class Car{
    public String brand;
    public String numberPlate;
    public int noOfDoors;

    public Car(String brand, String numberPlate, int noOfDoors) {
        this.brand = brand;
        this.numberPlate = numberPlate;
        this.noOfDoors = noOfDoors;
    }
}

Вот код, который сортирует список вышеуказанных объектов Car:

List list = new ArrayList<>();

list.add(new Car("Volvo V40" , "XYZ 201845", 5));
list.add(new Car("Citroen C1", "ABC 164521", 4));
list.add(new Car("Dodge Ram" , "KLM 845990", 2));

Comparator carBrandComparator = new Comparator() {
    @Override
    public int compare(Car car1, Car car2) {
        return car1.brand.compareTo(car2.brand);
    }
};

Collections.sort(list, carBrandComparator);

Обратите внимание на реализацию Comparator в приведенном выше примере. Сравнивается только поле бренда объектов Car. Можно создать другую реализацию, которая сравнивает номерные знаки или даже количество дверей в автомобилях.

Также обратите внимание, что возможно реализовать Comparator, используя Lambda. Вот пример, который сортирует объекты List of Car с использованием трех различных лямбда-реализаций интерфейса Comparator, каждая из которых сравнивает экземпляры Car по своему полю:

List list = new ArrayList<>();

list.add(new Car("Volvo V40" , "XYZ 201845", 5));
list.add(new Car("Citroen C1", "ABC 164521", 4));
list.add(new Car("Dodge Ram" , "KLM 845990", 2));


Comparator carBrandComparatorLambda      =
  (car1, car2) -> car1.brand.compareTo(car2.brand);

Comparator carNumberPlatComparatorLambda =
  (car1, car2) -> car1.numberPlate.compareTo(car2.numberPlate);

Comparator carNoOfDoorsComparatorLambda  =
  (car1, car2) -> car1.noOfDoors - car2.noOfDoors;

Collections.sort(list, carBrandComparatorLambda);
Collections.sort(list, carNumberPlatComparatorLambda);
Collections.sort(list, carNoOfDoorsComparatorLambda);

Итерация

Вы можете выполнить итерацию несколькими способами. Три наиболее распространенных:

  • Использование итератора.
  • Использование цикла for-each.
  • Использование цикла for.
  • Использование API Java Stream.

Я объясню каждый из этих методов итерации списка Java в следующих разделах.

Итерация с использованием итератора

Вот пример:

List list = new ArrayList();

list.add("first");
list.add("second");
list.add("third");

Iterator iterator = list.iterator();
while(iterator.hasNext()) {
    Object next = iterator.next();
}

Вы получаете Iterator, вызывая метод iterator() интерфейса List.

Получив Iterator, вы можете продолжать вызывать его метод hasNext(), пока он не вернет false. Вызов hasNext() выполняется внутри цикла while.

Внутри цикла while вы вызываете метод Iterator next() интерфейса Iterator для получения следующего элемента, на который указывает Iterator.

Если список напечатан с использованием Java Generics, вы можете сохранить некоторые объекты внутри цикла while. Вот пример:

List list = new ArrayList<>();

list.add("first");
list.add("second");
list.add("third");
    
Iterator iterator = list.iterator();
while(iterator.hasNext()){
    String obj = iterator.next();
}

Итерация с использованием цикла For-Each

Второй способ – использовать цикл for, добавленный в Java 5 (также называемый циклом «для каждого»):

List list = new ArrayList();

list.add("first");
list.add("second");
list.add("third");

for(Object element : list) {
    System.out.println(element);
}

Цикл for выполняется один раз для каждого элемента списка. Внутри него каждый элемент, в свою очередь, связан с переменной obj.

Если список напечатан (List), вы можете изменить тип переменной внутри цикла:

List list = new ArrayList();

//add elements to list

for(String element : list) {
    System.out.println(element);
}

Обратите внимание, список набирается как String. Поэтому вы можете установить тип переменной внутри цикла для String.

Итерация с помощью цикла For

Пример:

List list = new ArrayList();

list.add("first");
list.add("second");
list.add("third");
    
for(int i=0; i < list.size(); i++) {
    Object element = list.get(i);
}

Цикл for создает переменную int и инициализирует ее равной 0. Затем он зацикливается до тех пор, пока int i меньше размера списка. Для каждой итерации переменная увеличивается.

Внутри цикла for пример обращается к элементам List с помощью метода get(), передавая переменную i в качестве параметра.

Опять же, если список набирается с использованием Java Generics, например, для String, то вы можете использовать универсальный тип List в качестве типа для локальной переменной, которая назначается каждому элементу List в ходе итерации:

List list = new ArrayList();

list.add("first");
list.add("second");
list.add("third");
    
for(int i=0; i < list.size(); i++) {
    String element = list.get(i);
}

Обратите внимание, что тип локальной переменной внутри цикла for теперь String. Поскольку список обычно типизируется как String, он может содержать только объекты String. Следовательно, компилятор знает, что только метод String может быть возвращен из метода get(). Поэтому вам не нужно приводить элемент, возвращенный get(), в String.

С использованием API Java Stream

Для итерации вы должны сначала получить поток из списка. Это выполняется путем вызова метода List stream(). Вот пример получения потока из списка:

List stringList = new ArrayList();

stringList.add("abc");
stringList.add("def");

Stream stream = stringList.stream();

Последняя строка этого примера вызывает метод List stream() для получения потока, представляющего элементы списка.

Как только вы получили поток, можете выполнить итерацию потока, вызвав его метод forEach():

List stringList = new ArrayList();

stringList.add("one");
stringList.add("two");
stringList.add("three");

Stream stream = stringList.stream();
stream
    .forEach( element -> { System.out.println(element); });

Вызов метода forEach() заставит Stream выполнить внутреннюю итерацию всех элементов потока и вызвать получателя, переданного в качестве параметра методу forEach() для каждого элемента в потоке.

Добавить комментарий