Java 迭代列表示例

位置:首页>文章>详情   分类: Java教程 > 编程技术   阅读(374)   2023-06-26 07:54:18

在 Java 中迭代列表是非常基本的操作,但多年来它经历了一些重大变化。我们将在给定的示例中介绍所有这些更改。为简单起见,我创建了一个简单的 String 列表,如下所示:

List<String> list = Arrays.asList(new String[]{"One","Two","Three","Four","Five"});

现在让我们学习迭代它。

使用标准 for 循环迭代列表

这从一开始就在语言中,但我不再喜欢这种类型的循环。它容易出错且令人困惑——主要是在使用 greater-thanless-than 运算符时。

//Using standard for loop
for (int i = 0; i < list.size(); i++) 
{
	System.out.println(list.get(i));
}

使用迭代器迭代列表

迭代器是比标准 for 循环更好的方法。它使用集合框架自己的 Iterator 接口。

//Using Iterator
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
	System.out.println(iterator.next());
}

使用增强的 for 循环迭代列表

这是一个 for 循环,但它隐藏了处理索引的复杂性,因此使用起来很漂亮。

//Using enhanced for loop
for (String str : list) {
	System.out.println(str);
}

在底层,这种形式的迭代使用 Iterator 接口并调用其 hasNextnext 方法。

阅读更多:Java 中增强的 for (for-each) 循环< /a>

使用 Java 8 函数式风格迭代列表

Tell-Don't-Ask 是一个著名的设计原则,它提倡将数据与操作该数据的函数(基本OOP 概念)。在以上所有示例中,我们要求执行特定的迭代,而不是将迭代的细节留给底层库并专注于任务。

Java 8 函数式编程解决了这个问题还有一个问题——forEach 方法接受类型为 消费者。顾名思义,Consumer 的实例将通过其 accept 方法使用提供给它的内容。

//Using forEach() with Consumer interface
list.forEach(new Consumer<String>() {
	@Override
	public void accept(String name) {
		System.out.println(name);
	}
});

这里,forEach 方法将为 list 中的每个元素调用给定 Consumeraccept 方法,并且依次打印出名称。你可以在 accept 方法中做任何你想做的事。

使用 java 8 lambda 表达式迭代列表

上面的 forEach 方法非常有效并且在设计方面是正确的,但是它太冗长了。您可以使用 lambda 表达式将其修剪为更精简的版本。

//Using forEach() - lambda expression
list.forEach((final String name) -> System.out.println(name));

lambda 表达式的标准语法要求将参数括在括号中,并提供类型信息并以逗号分隔。 Java 编译器也提供了一些宽容并且可以推断类型。省去类型很方便,需要更少的努力,而且噪音更小。这里的类型信息是从集合本身推断出来的,因此您也可以保留该信息。

//Using forEach() - without type information
list.forEach(name -> System.out.println(name));

现在太好了。使用这种迭代有助于我们专注于应用程序逻辑——而不是编写对列表进行迭代的非生产性代码。

快乐学习!!

地址:https://www.cundage.com/article/iterate-list-examples.html

相关阅读

Java Iterator 接口用于迭代 Collection 的元素(List、Set 或 地图)。 Iterator 有助于从指定集合中逐个检索元素,并可选择对每个元素执行操作。 Java ...
下面的示例使用不同的技术来迭代 java 集合。在任何情况下都选择使用适合您且方便的方式。 Iterable.forEach 方法(Java 8) 最近在 java 8 中引入,此方法可以在任何...
Java LinkedHashSet 类扩展了 HashSet 并实现了 Set 接口。它与 HashSet 类非常相似,除非提供可预测的迭代顺序&lt; /strong&gtl;。 1. Li...
Java Stream 收集教程展示了如何使用收集器进行缩减操作。 Java流 Java 流 是来自支持聚合操作的源的元素序列。流不存储元素;元素是按需计算的。从集合、数组或 I/O 资源等数据...
Java Spliterator 接口是一个内部迭代器,它将流 分成更小的部分。这些较小的零件可以并行处理。 在实际编程中,我们可能永远不需要直接使用Spliterator。在正常操作下,它的行...
很多时候您会在面试 中被问到这个问题。例如Iterator 如何在 java 中工作,它如何从 List 中删除对象?从列表中删除对象时,什么时候可能会产生ConcurrentModificat...
ArrayList 是非同步 集合,不应在并发中使用a&gtl; 没有显式同步的环境。要同步ArrayList,我们可以使用JDK 提供的两个方法。 Collections.synchroniz...
Java forEach() 方法是一个实用函数,用于迭代集合,例如(List、Collect或Map)和 Stream。它用于对集合中的每个元素执行给定的操作。 forEach() 方法已添加...
在本文中,我们处理集合。 Java 为数据存储和检索提供了专门的类。 Java 5 引入了泛型集合。通用集合更灵活,它们是处理数据的首选方式。泛型集合增强了代码重用、类型安全和性能。 集合框架中...
学习在 Java 中交换 arraylist 中的两个元素。我们将使用 Collections.swap() 方法在指定索引处交换指定数组列表中的两个元素。 1.交换arraylist中的两个元...