JDK源码阅读——java.lang.Iterable

接口

Iterable

1. 概述

实现这个接口允许对象成为“for-each循环”语句的目标。

2.源码阅读

public interface Iterable<T> {
    /**
     *返回类型{@code T}元素的迭代器.
     *
     * @return  Iterator.
     */
    Iterator<T> iterator();

    /**
     * 对Iterable的每个元素执行给定的操作,直到所有元素都被处理或操作抛出异常
     *
     * @param action 为每个元素执行的操作 例如:(s)-> System.out.println(s)
     * 
     * @throws NullPointerException 如果指定的操作为空
     * @since 1.8
     */
    default void forEach(Consumer<? super T> action) {
        Objects.requireNonNull(action);
        for (T t : this) {
            action.accept(t);
        }
    }

    /**
     * 在这个Iterable描述的元素之上创建一个Spliterator。
     * @return 一个Spliterator对这个元素所描述的元素。
     * @since 1.8
     */
    default Spliterator<T> spliterator() {
        return Spliterators.spliteratorUnknownSize(iterator(), 0);
    }

3.Iterable运用

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class SubIterable implements Iterable<String> {
    private List<String> strings = new ArrayList<String>();

    public void add(String string){
        strings.add(string);
    }

    @Override
    public Iterator<String> iterator() {
        return strings.iterator();
    }

}


public class IterableTest {
    @Test
    public void test(){
        SubIterable subIterable = new SubIterable();
        subIterable.add("加进去");
        subIterable.add("再加进去1");
        subIterable.add("再加进去2");
        subIterable.add("再加进去3");
        System.out.println("for - each:");
        for (String s:subIterable
             ) {
            System.out.println(s);
        }
        System.out.println("forEach:");
        subIterable.forEach((s) -> System.out.println(s));
    }
}

输出结果 :
for - each:
加进去
再加进去1
再加进去2
再加进去3
forEach:
加进去
再加进去1
再加进去2
再加进去3

实现Iterable就可以用for-each语句

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值