在for循环中获取元素及其索引的便捷方法

时间:2016-02-18 13:24:33

标签: java list for-loop foreach java-8

for each循环是一个很好的语法缩写,用于迭代List中的所有元素:

for (Object object : list) {
  // do something with the object
}

然而,当我还需要在每次迭代中处理的元素的索引时,我必须“退回”。旧样式:

for (int i = 0; i < list.size(); i++) {
  Object object = list.get(i);
  // do something with the object and its index
}

此外,如果列表不是随机访问列表(例如LinkedList),为避免迭代的二次复杂性,我必须编写如下内容:

int i = 0;
for (Object object : list) {
  // do something with the object and its index
  i++;
}

在每次迭代中是否有更方便的形式来获取元素及其索引(可能是Java 8流API和一些短lambda)?

到目前为止,我能够达到的最佳方法是创建自定义的可重用功能界面:

@FunctionalInterface
public interface WithIndex<T> {

    void accept(int i, T t);

    public static <T> void forEach(Collection<T> collection, WithIndex<T> consumer) {
        int i = 0;
        for (T t : collection) {
            consumer.accept(i++, t);
        }
    }
}

然后我可以通过以下方式迭代集合:

public class Main {

    public static void main(String[] args) {
        List<String> list = Arrays.asList("a", "b", "c");

        WithIndex.forEach(list, (i, word) -> {
            System.out.println("index=" + i + ", element=" + word);
        });
    }
}

0 个答案:

没有答案