如何使用一个方法迭代不同对象的ArrayList?

时间:2019-04-27 19:43:15

标签: java oop arraylist methods

我正在尝试遍历两个不同类型的ArrayList字段。虽然我可以为每种类型编写方法,但是有没有办法仅用一个方法对其进行迭代?我似乎不太清楚是否可以将字段作为方法参数传递。在下面的代码中,方法iteratePhrase()应该打印出两个ArrayList中的所有元素。在其中,[...]表示numbersletters

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 个答案:

答案 0 :(得分:3)

您可以将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);

答案 1 :(得分:2)

您可以使用Java 8流:

public <T> void iteratePhrase(List<T> al) {
   al.stream.forEach(System.out::println);
}

答案 2 :(得分:1)

您可以使numbersletters都扩展一个公共类,例如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的对象,这与上面对泛型的回答不同。