更多: zhilu jiaocheng

Java迭代器示例

迭代ArrayList 示例

迭代 ArrayList 元素的 Java 示例。

ArrayList<String> list = new ArrayList<>();

list.add("A");
list.add("B");
list.add("C");
list.add("D");
System.out.println(list);
//Get iterator
Iterator<String> iterator = list.iterator();
//Iterate over all elements
while(iterator.hasNext()) 
{
    //Get current element
    String value = iterator.next();

    System.out.println( value );

    //Remove element
    if(value.equals("B")) {
        iterator.remove();
    }
}
System.out.println(list);

输出:

[A, B, C, D]
A
B
C
D
[A, C, D]

迭代HashSet 示例

遍历 HashSet 与遍历列表非常相似。

HashSet<String> hashSet = new HashSet<>();

hashSet.add("A");
hashSet.add("B");
hashSet.add("C");
hashSet.add("D");
System.out.println(hashSet);
//Get iterator
Iterator<String> iterator = hashSet.iterator();
//Iterate over all elements
while(iterator.hasNext()) 
{
    //Get current element
    String value = iterator.next();

    System.out.println( value );

    //Remove element
    if(value.equals("B")) {
        iterator.remove();
    }
}
System.out.println(list);

输出:

[A, B, C, D]
A
B
C
D
[A, C, D]

迭代HashMap 键示例

HashMap<Integer, String> map = new HashMap<>();

map.put(1, "A");
map.put(2, "B");
map.put(3, "C");
map.put(4, "D");
System.out.println(map);
//Get iterator
Iterator<String> iterator = map.keys().iterator();
//Iterate over all keys
while(iterator.hasNext()) 
{
    String key = iterator.next();
    System.out.println( "Key : " + key + ", Value : " + map.get(key) );
}

输出:

{1=A, 2=B, 3=C, 4=D}
Key : 1, Value : A
Key : 2, Value : B
Key : 3, Value : C
Key : 4, Value : D

HashMap 值迭代器示例

HashMap<Integer, String> map = new HashMap<>();

map.put(1, "A");
map.put(2, "B");
map.put(3, "C");
map.put(4, "D");
System.out.println(map);
//Get iterator
Iterator<String> iterator = map.values().iterator();
//Iterate over all values
while(iterator.hasNext()) 
{
    System.out.println( "Value : " + iterator.next() );
}

输出:

{1=A, 2=B, 3=C, 4=D}
Value : A
Value : B
Value : C
Value : D

迭代器 forEachRemaining() 示例

迭代 ArrayList 元素并对它们执行操作的 Java 示例。

ArrayList<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.iterator().forEachRemaining( System.out::println );

输出:

A
B
C
D
Java Iterator 接口

Java Iterator 接口用于迭代集合(列表、集合或者映射)中的元素。

Java 迭代器的方法

hasNext()

  • 如果迭代中有更多元素保留在集合中,则此方法返回“true”。
  • 如果迭代器遍历了所有元素,则此方法将返回 false

next()

  • 此方法返回迭代中的下一个元素。
  • 如果迭代没有更多元素,它会抛出 NoSuchElementException。

remove()

  • 它从底层集合中移除迭代器返回的最后一个元素(可选操作)。
  • 每次调用 next() 只能调用一次此方法。
  • 如果在迭代过程中以任何方式修改了底层集合,而不是通过调用 remove()方法,迭代器将抛出 ConcurrentModificationException 。
  • 这样做的迭代器被称为快速失败迭代器,因为它们快速而干净地失败,而不是冒着在未来不确定的时间出现任意、非确定性行为的风险。

forEachRemaining()

  • 此方法对每个剩余元素执行给定的操作,直到处理完所有元素或者操作引发异常。
  • 如果指定了该顺序,则操作按迭代顺序执行。
  • 如果指定的操作为空,则抛出 NullPointerException。

Java迭代器接口

所有 Java 集合类都提供 iterator() 方法,该方法返回 Iterator 的实例以遍历该集合中的元素。
例如,arraylist 类的 iterator() 方法以适当的顺序在此列表中的元素上返回一个迭代器。

ArrayList<String> list = new ArrayList<>();

list.add("A");
list.add("B");
list.add("C");
list.add("D");
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()) {
    System.out.println( iterator.next() );
}

输出:

A
B
C
D

Java 将迭代器转换为流

首先将迭代器转换为“Spliterator”,然后使用“StreamSupport”从 Spliterator 获取流,从而将迭代器转换为流。

import java.util.Arrays;
import java.util.Iterator;
import java.util.Spliterator;
import java.util.Spliterators;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
public class IteratorToStream 
{
	public static void main(String[] args) 
	{
		// Iterator
		Iterator<String> iterator = Arrays.asList("a", "b", "c")
											.listIterator();
		//Extra step to get Spliterator
		Spliterator<String> splitItr = Spliterators
				.spliteratorUnknownSize(iterator, Spliterator.ORDERED);
		// Iterator -> Stream
		Stream<String> stream = StreamSupport.stream(splitItr, false);
		// Apply stream operations
		stream.forEach(System.out::println);
	}
}

程序输出:

a
b
c
日期:2020-09-17 00:09:47 来源:oir作者:oir