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()); } }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。