Java迭代器示例大全
下文笔者列举java中迭代器的用法举例大全,如下所示
获取迭代器的当前位置
迭代器对list/Set集合循环
package com.java265;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
public class JavaIteratorExample1a {
public static void main(String[] args) {
/*
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(3);
set.add(4);
set.add(5);
Iterator<Integer> iterator = set.iterator();
*/
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
Integer result = iterator.next();
System.out.println(result);
}
}
}
Java8中forEachRemaining对迭代器进行循环
forEachRemaining源码
default void forEachRemaining(Consumer<? super E> action) {
Objects.requireNonNull(action);
while (hasNext())
action.accept(next());
}
例:
package com.java265;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
public class JavaIteratorExample1b {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(88,99,111,222,333);
Iterator<Integer> iterator = list.iterator();
// Lambda
// iterator.forEachRemaining(x -> System.out.println(x));
// Java 8, method reference
iterator.forEachRemaining(System.out::println);
}
}
forEachRemaining示例2
List<Integer> list = Arrays.asList(88,99,110,222,333);
Iterator<Integer> iterator = list.iterator();
iterator.forEachRemaining(x -> {
System.out.println(x * 2);
});
Iterator.remove()删除元素
package com.java265; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class JavaIteratorExample1c { public static void main(String[] args) { // immutable list // List<Integer> list = Arrays.asList(88,99,112,222,333); // mutable list List<Integer> list = new ArrayList<>(); list.add(66); list.add(77); list.add(88); list.add(99); list.add(100); Iterator<Integer> iterator = list.iterator(); while (iterator.hasNext()) { Integer next = iterator.next(); if (next == 66 || next == 88) { iterator.remove(); } } list.forEach(System.out::println); } }
ListIterator
List转换为ListIterator
package com.java265;
import java.util.Arrays;
import java.util.List;
import java.util.ListIterator;
public class JavaIteratorExample2a {
public static void main(String[] args) {
List<String> list = Arrays.asList("a", "b", "c", "d", "e");
// get ListIterator, start from list's index 2
ListIterator<String> iterator = list.listIterator(2);
iterator.forEachRemaining(System.out::print); // cde
System.out.println("");
// get ListIterator, start from list's index 0
ListIterator<String> iterator2 = list.listIterator();
iterator2.forEachRemaining(System.out::print); // abcde
}
}
沿前后方向遍历列表
package com.java265;
import java.util.Arrays;
import java.util.List;
import java.util.ListIterator;
public class JavaIteratorExample2b {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(88,99,100,22,333,444);
ListIterator<Integer> iterator = list.listIterator();
//从前向后遍历
while (iterator.hasNext()) {
Integer next = iterator.next();
System.out.println(next);
}
System.out.println("=====================");
//从后向前遍历
while (iterator.hasPrevious()) {
Integer previous = iterator.previous();
System.out.println(previous);
}
}
}
使用ListIterator.set()更新元素
package com.java265;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class JavaIteratorExample2c {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(11);
list.add(22);
list.add(33);
list.add(44);
list.add(55);
ListIterator<Integer> iterator = list.listIterator();
while (iterator.hasNext()) {
Integer next = iterator.next();
if (next == 33) {
iterator.set(666);
}
if (next == 44) {
iterator.set(777);
}
}
list.forEach(x -> System.out.println(x));
}
}
使用ListIterator.add()添加元素
package com.java265;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class JavaIteratorExample2d {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(11);
list.add(22);
list.add(33);
list.add(44);
list.add(55);
ListIterator<Integer> iterator = list.listIterator();
while (iterator.hasNext()) {
Integer next = iterator.next();
if (next == 55) {
iterator.add(66);
}
}
list.forEach(x -> System.out.println(x));
}
}
获取迭代器的当前位置
previousIndex()和nextIndex()
package com.java265;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class JavaIteratorExample2c {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(11);
list.add(22);
list.add(33);
list.add(44);
list.add(55);
ListIterator<Integer> iterator = list.listIterator();
while (iterator.hasNext()) {
if (iterator.previousIndex() < 0) {
iterator.add(0);
}
// move the iterator
iterator.next();
// if this is last index
if (iterator.nextIndex() >= list.size()) {
iterator.add(66);
}
}
list.forEach(x -> System.out.println(x));
}
}
将迭代器转换为流
package com.java265;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
public class JavaIteratorExample3a {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(11);
list.add(22);
list.add(33);
list.add(44);
list.add(55);
Iterator<Integer> iterator = list.iterator();
// Iterator -> spliterators -> Stream -> List
List<Integer> result = StreamSupport.stream(
Spliterators.spliteratorUnknownSize(iterator, Spliterator.ORDERED), false)
.map(x -> x * 2)
.collect(Collectors.toList());
result.forEach(x -> System.out.println(x));
System.out.println(result.getClass());
}
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


