Java迭代器示例大全

乔欣 Java经验 发布时间:2023-02-13 20:55:33 阅读数:7096 1
下文笔者列举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());
 
    }
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202302/16762929835782.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者