在 Java 中迭代列表的方法
1.绪论
迭代一个列表的元素是程序中最常见的任务之一。
在本教程中,我们将回顾在Java中实现这一目的的不同方法。我们将专注于按顺序迭代列表,尽管在反向中也很简单。
进一步的阅读。
2.for 循环
首先,让我们回顾一下一些for循环的选项。
我们将首先为我们的例子定义一个国家清单。
List<String> countries = Arrays.asList("Germany", "Panama", "Australia");
2.1.基本的for循环
迭代的最常见的流程控制语句是基本的for循环。
for循环定义了三种用分号分隔的语句。第一条语句是初始化语句。第二条定义了终止条件。最后一条语句是更新条款。
在这里,我们只是用一个整数变量作为一个索引。
for (int i = 0; i < countries.size(); i++) {
System.out.println(countries.get(i));
}
在初始化过程中,我们必须声明一个整数变量来指定起点。这个变量通常作为列表的索引。
终止条件是一个表达式,在评估后返回一个布尔值。一旦这个表达式被评估为false,循环就结束了。
更新子句用于修改索引变量的当前状态,增加或减少它,直到终止点为止。
2.2.增强的for循环
增强的 for 循环是一个简单的结构,它允许我们访问列表中的每个元素。它类似于基本的 for 循环,但更易读和紧凑。因此,它是最常用的遍历列表的形式之一。
请注意,增强的for循环比基本的for循环更简单。
for (String country : countries) {
System.out.println(country);
}
3.迭代器
一个Iterator是一个设计模式,它为我们提供了一个标准的接口来遍历一个数据结构,而不必担心内部的实现。
这种遍历数据结构的方式有很多优点,其中我们可以强调的是,我们的代码并不依赖于实现方式。
因此,该结构可以是二叉树或双链表,因为Iterator将我们从执行遍历的方式中抽象出来。通过这种方式,我们可以轻松地在代码中替换数据结构,而不会出现令人不快的问题。
3.1.迭代器。
在Java中,Iterator模式体现在java.util.Iterator类中。它被广泛用于Java的Collections中。在Iterator中有两个关键方法,即hasNext()和next()方法。
在这里,我们将演示这两种方法的使用。
Iterator<String> countriesIterator = countries.iterator();
while(countriesIterator.hasNext()) {
System.out.println(countriesIterator.next());
}
hasNext()方法检查列表中是否有剩余的元素。
next()方法返回迭代中的下一个元素。
3.2. 列表迭代器
一个ListIterator允许我们以前向或后向的顺序遍历一个元素的列表。
用ListIterator向前滚动一个列表时,遵循了与Iterator类似的机制。这样,我们可以用next()方法将迭代器向前移动,我们可以用hasNext()方法找到列表的末端。
我们可以看到,ListIterator看起来与我们之前使用的Iterator非常相似。
ListIterator<String> listIterator = countries.listIterator();
while(listIterator.hasNext()) {
System.out.println(listIterator.next());
}
4.forEach()
4.1. Iterable.forEach()
从 Java 8 开始,我们可以使用forEach() 方法迭代列表的元素。此方法在 Iterable 中定义 接口,并且可以接受 Lambda 表达式作为参数。
语法是非常简单的。
countries.forEach(System.out::println);
在forEach函数之前,Java中的所有迭代器都是活动的,这意味着它们涉及一个for或while循环,该循环遍历数据集合,直到满足某个条件为止。
随着forEach作为Iterable接口中的一个函数的引入,所有实现Iterable的类都增加了forEach的函数。
4.2.Stream.forEach()
我们还可以将值集合转换为 Stream,并可以访问 forEach()、map() 和 filter() 等操作。
在这里,我们将演示流的一个典型用途。
countries.stream().forEach((c) -> System.out.println(c));
5.总结
在这篇文章中,我们演示了使用Java API对列表中的元素进行迭代的不同方法。这些方法包括for循环,增强的for循环,Iterator,ListIterator,和forEach()方法(包含在Java 8中)。
然后我们学习了如何使用forEach()方法来处理Streams。
最后,本文中所使用的所有代码都可以在我们的Github repo中找到。