Java : Iterable 示例

Iterable (Java SE 22 & JDK 22) 示例。
您将在大多数 Iterable<T> 方法中找到代码示例。

注解 :

  • 本文可能使用了翻译软件以方便阅读。 另请查看英文原文

简介

实现此接口允许一个对象成为增强 for 语句(有时称为“for-each 循环”语句)的目标。 (机器翻译)

Class diagram

public class Sample implements Iterable<String> {
    private static final String[] VALUES = {"aaa", "bbb", "ccc"};
    private int index;

    @Override
    public Iterator<String> iterator() {
        return new Iterator<>() {
            @Override
            public boolean hasNext() {
                return VALUES.length != index;
            }

            @Override
            public String next() {
                final var value = VALUES[index];
                index++;
                return value;
            }
        };
    }
}
final var sample = new Sample();
for (final var s : sample) {
    System.out.println(s);
}

// Result
// ↓
//aaa
//bbb
//ccc

Methods

default void forEach (Consumer<? super T> action)

对 Iterable 的每个元素执行给定的操作,直到所有元素都已处理或该操作引发异常。 (机器翻译)

final Iterable<String> it = List.of("aaa", "bbb", "ccc");
System.out.println(it); // [aaa, bbb, ccc]

it.forEach(s -> System.out.println(s));

// Result
// ↓
//aaa
//bbb
//ccc
final Iterable<Path> it = Path.of("dir1", "dir2", "test.txt");
System.out.println(it); // dir1\dir2\test.txt

it.forEach(System.out::println);

// Result
// ↓
//dir1
//dir2
//test.txt

Iterator<T> iterator ()

返回 T 类型元素的迭代器。 (机器翻译)

final Iterable<String> it = List.of("aaa", "bbb", "ccc");
System.out.println(it); // [aaa, bbb, ccc]

final var iterator = it.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}

// Result
// ↓
//aaa
//bbb
//ccc

default Spliterator<T> spliterator ()

根据此 Iterable 描述的元素创建一个 Spliterator。 (机器翻译)

final Iterable<String> it = List.of("aaa", "bbb", "ccc", "ddd", "eee");
System.out.println(it); // [aaa, bbb, ccc, ddd, eee]

final var s1 = it.spliterator();
System.out.println("s1 size : " + s1.estimateSize()); // s1 size : 5

final var s2 = s1.trySplit();
System.out.println("s1 size : " + s1.estimateSize()); // s1 size : 3
System.out.println("s2 size : " + s2.estimateSize()); // s2 size : 2

s1.forEachRemaining(System.out::println);

// Result (s1)
// ↓
//ccc
//ddd
//eee

s2.forEachRemaining(System.out::println);

// Result (s2)
// ↓
//aaa
//bbb

相关文章

To top of page