Как перебрать ArrayLists разных объектов одним методом? - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь перебрать два поля ArrayList разных типов. Хотя я мог бы написать методы для каждого типа, есть ли способ перебрать их только одним методом? Я не могу понять, возможно ли передать поле в качестве аргумента метода. В приведенном ниже коде метод iteratePhrase() должен печатать все элементы в любом из ArrayLists. В нем [...] означает либо numbers, либо letters.

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

public class Phrase {
    private List<Number> numbers;
    private List<Letter> letters;

    public Phrase() {
        numbers;
        letters;
    }

    public void iteratePhrase() {
        for (int i=0; i<[...].size(); i++)
            System.out.println([...].get(i));
    }
}

Ответы [ 3 ]

3 голосов
/ 27 апреля 2019

Вы можете сделать iteratePhrase родовым, то есть заставить его взять List<T>; как

public <T> void iteratePhrase(List<T> al) {
    for (int i = 0; i < al.size(); i++) {
        System.out.println(al.get(i));
    }
}

Вы также можете использовать цикл for-each, например,

for (T t : al) {
    System.out.println(t);
}

В любом случае, вы бы позвонили

iteratePhrase(numbers);

и

iteratePhrase(letters);
2 голосов
/ 28 апреля 2019

Вы можете использовать поток Java 8:

public <T> void iteratePhrase(List<T> al) {
   al.stream.forEach(System.out::println);
}
1 голос
/ 27 апреля 2019

Вы можете сделать так, чтобы numbers и letters расширяли общий класс, например IterableObject.

Затем повторяйте, как это

public void iteratePhrase(List<IterableObject> l) {
    for (int i = 0; i < l.size(); i++) {
        System.out.println(l.get(i));
    }
}

или это

public void iteratePhrase(List<IterableObject> objects) {
    for (IterableObject object : objects) {
        System.out.println(object);
    }
}

Однако, функция iteratePhrase будет принимать только объекты, расширяющие IterableObject, в отличие от ответа выше с обобщениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...