Iterable接口表示一组对象,这些对象是Iterable的,这意味着可以迭代,这意味着实现Iterable接口,则可以迭代其元素,可以通过以下方式迭代Iterable对象,使用for-each循环,从Iterable获取Iterator或者通过Iterable 的forEach()
方法,下面会一一讲解。
用for-each循环等待的Iterable
第一种方法就是通过for-each 循环迭代,下面例子是如何通过for-each 循环迭代List。因为List继承了Collection
接口,Collection
接口继承了Iterable
,所以List对象可以使用for-each循环:
1
2
3
4
5
6
7
8
9List<String> list = new ArrayList<> (); list.add("one"); list.add("two"); list.add("three"); for( String element : list ){ System.out.println( element.toString() ); }
上面例子初始化了List对象,然后加了三个元素,然后用for-each循环迭代List,并且调用toString()方法打印每个元素。
通过Iterator迭代Iterable
第二个众方法是通过Iterator 迭代,Iterator 上一篇我们以及讲过,下面看代码:
1
2
3
4
5
6
7
8
9
10
11
12List<String> list = new ArrayList<>(); list.add("one"); list.add("two"); list.add("three"); Iterator<String> iterator = list.iterator(); while(iterator.hasNext()) { String element = iterator.next(); System.out.println( element ); }
调用Iterable的 forEach()方法迭代
通过调用Iterable的 forEach()
方法, forEach()
方法的参数是lambda表达式
,下面是代码:
1
2
3
4
5
6
7
8
9List<String> list = new ArrayList<>(); list.add("one"); list.add("two"); list.add("three"); list.forEach( (element) -> { System.out.println( element ); });
Iterable接口定义
Iterable
接口中只有三个方法需要实现,另外两个以及有默认的实现,下面是
Iterable接口的定义:
1
2
3
4
5
6
7
8
9public interface Iterable<T> { Iterator<T> iterator(); Spliterator<T> spliterator(); void forEach(Consumer<? super T> action); }
必须实现的方法是iterator()
,这个方法返回一个Iterator,可以用来迭代实现了Iterable
接口
的对象,获取迭代器是在底层进行的,所以看不到这一点。当将Iterable与for-each循环一起使用时,Java编译器负责为此生成代码。
Iterable的实现
Iterable接口(java.lang.Iterable
)是java集合根接口中的一个,因此java中有好几个类实现了Iterable接口,因此,可以迭代这些类的内部元素。同样也有一些接口继承了Iterable接口,所以实现了继承Iterable
的接口的类,同时也实现了Iterable
接口,这些类的元素同样可以迭代。Collection
接口继承了Iterable接口,所以所有Collection
的子类都实现了Iterable接口。比如List和Set继承了Collection接口,所以他们也继承了Iterable接口。
实现Iterable接口
下面例子简单的实现了Iterable接口:
1
2
3
4
5
6
7public class Persons implements Iterable { private List<Person> persons = new ArrayList<Person>(); public Iterator<Person> iterator() { return this.persons.iterator(); } }
Persons
实例对象可以使用for-each循环:
1
2
3
4
5Persons persons = ... //obtain Persons instance with Person objects inside. for(Person person : persons) { // do something with person object. }
获取Spliterator
可以通过 Iterable 的spliterator()
方法获取
Spliterator,这里不详细讲解Spliterator,只讲解一下简单的应用:
1
2
3
4
5
6
7List<String> list = new ArrayList<>(); list.add("one"); list.add("two"); list.add("three"); Spliterator<String> spliterator = list.spliterator();
参考: http://tutorials.jenkov.com/java/for.html#the-java-for-each-loop
http://tutorials.jenkov.com/java-collections/iterable.html
最后
以上就是失眠龙猫最近收集整理的关于Java集合-Iterable的全部内容,更多相关Java集合-Iterable内容请搜索靠谱客的其他文章。
发表评论 取消回复