一些Java Iterator和ListIterator示例。
1.迭代器
1.1从List或Set获取Iterator ,并对其进行循环。
JavaIteratorExample1a.java
package com.mkyong;
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);
}
}
}
输出量
1
2
3
4
5
1.2 Java 8中,在Iterator添加了一个新的forEachRemaining ,它提供了Consumer参数来让我们定义如何使用该项目。
Iterator.java
default void forEachRemaining(Consumer<? super E> action) {
Objects.requireNonNull(action);
while (hasNext())
action.accept(next());
}
现在,我们可以使用lambda来提供Consumer功能接口的实现。
JavaIteratorExample1b.java
package com.mkyong;
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(1, 2, 3, 4, 5);
Iterator<Integer> iterator = list.iterator();
// lambda
// iterator.forEachRemaining(x -> System.out.println(x));
// Java 8, method reference
iterator.forEachRemaining(System.out::println);
}
}
输出量
1
2
3
4
5
1.3 forEachRemaining另一个示例。
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Iterator<Integer> iterator = list.iterator();
iterator.forEachRemaining(x -> {
System.out.println(x * 2);
});
输出量
2
4
6
8
10
1.4使用Iterator.remove()删除元素。
JavaIteratorExample1c.java
package com.mkyong;
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(1, 2, 3, 4, 5);
// mutable list
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
Integer next = iterator.next();
if (next == 3 || next == 4) {
iterator.remove();
}
}
list.forEach(System.out::println);
}
}
输出量
1
2
5
2. ListIterator
此ListIterator扩展了Iterator以提供其他功能,例如
- 在
next()和previous()任一方向遍历列表 - 在迭代过程中修改列表,
add()和set() - 获取迭代器在列表中的当前位置
nextIndex()和previousIndex()
2.1将List转换为ListIterator 。
JavaIteratorExample2a.java
package com.mkyong;
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
}
}
输出量
cde
abcde
2.2沿前后方向遍历列表。
JavaIteratorExample2b.java
package com.mkyong;
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(1, 2, 3, 4, 5);
ListIterator<Integer> iterator = list.listIterator();
// loop to the end
while (iterator.hasNext()) {
Integer next = iterator.next();
System.out.println(next);
}
System.out.println("---");
// now loop back to the begin
while (iterator.hasPrevious()) {
Integer previous = iterator.previous();
System.out.println(previous);
}
}
}
输出量
1
2
3
4
5
---
5
4
3
2
1
2.3使用ListIterator.set()更新元素
JavaIteratorExample2c.java
package com.mkyong;
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(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
ListIterator<Integer> iterator = list.listIterator();
while (iterator.hasNext()) {
Integer next = iterator.next();
if (next == 3) {
iterator.set(33);
}
if (next == 4) {
iterator.set(44);
}
}
list.forEach(x -> System.out.println(x));
}
}
输出量
1
2
33 // updated, was 3
44 // updated, was 4
5
2.4使用ListIterator.add()添加元素
JavaIteratorExample2d.java
package com.mkyong;
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(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
ListIterator<Integer> iterator = list.listIterator();
while (iterator.hasNext()) {
Integer next = iterator.next();
if (next == 5) {
iterator.add(6);
}
}
list.forEach(x -> System.out.println(x));
}
}
输出量
1
2
3
4
5
6 // new!
2.4获取迭代器的当前位置, previousIndex()和nextIndex()
JavaIteratorExample2c.java
package com.mkyong;
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(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
ListIterator<Integer> iterator = list.listIterator();
while (iterator.hasNext()) {
// cursor index, iterator not move yet!
// init = -1 , add 0
if (iterator.previousIndex() < 0) {
iterator.add(0);
}
// move the iterator
iterator.next();
// if this is last index
if (iterator.nextIndex() >= list.size()) {
iterator.add(6);
}
}
list.forEach(x -> System.out.println(x));
}
}
输出量
0
1
2
3
4
5
6
3.将迭代器转换为流
遵循步骤Iterator -> Spliterators -> Stream -> List
JavaIteratorExample3a.java
package com.mkyong;
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(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
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());
}
}
输出量
2
4
6
8
10
class java.util.ArrayList
本文深入讲解Java中的迭代器(Iterator)和列表迭代器(ListIterator)的使用方法,包括基本迭代、元素操作、位置获取及转换为流等功能,通过多个示例代码展示迭代器在Java集合框架中的应用。
2069

被折叠的 条评论
为什么被折叠?



