接口
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语句