sp0*_*00m 6 java foreach iterator for-loop
即使只是List
和Set
实现接口Iterable
,相信一个数组,列表,集和地图都是可迭代的对象,在我们可以使用它们全部通过foreach循环:
for(String s : new String[0]);
for(String s : new ArrayList<String>());
for(String s : new HashSet<String>());
for(Entry<Integer, String> entry : new HashMap<Integer, String>().entrySet());
Run Code Online (Sandbox Code Playgroud)
情况Map
可能有点不同,但我们将其视为键值列表(它实际上是什么).
从可迭代的理解开始,我在以下方法中缺少一个类型?
public boolean isIterable(Object o) {
return o instanceof Object[] || o instanceof Iterable || o instanceof Map;
}
Run Code Online (Sandbox Code Playgroud)
换句话说,是否有任何其他类型可以通过foreach循环迭代?
一边但是结果提出的问题:类型列表是否详尽无遗?
Hov*_*els 17
任何实现Iterable<T>
接口的东西都是可迭代的.该可迭代API列出了许多这样做的核心Java类.请注意,这还包括您创建的实现接口的类.如果我的类包含一个ArrayList或其他可迭代对象,我有时会这样做,我想方便地遍历这个内容.我只是将列表的Iterator对象作为iterator()方法的返回结果传递.
例如:
Person.java
class Person {
private String lastName;
private String firstName;
public Person(String lastName, String firstName) {
this.lastName = lastName;
this.firstName = firstName;
}
@Override
public String toString() {
return "Person [lastName=" + lastName + ", firstName=" + firstName + "]";
}
}
Run Code Online (Sandbox Code Playgroud)
MyPeople.java
class MyPeople implements Iterable<Person> {
List<Person> personList = new ArrayList<Person>();
// ... other methods and constructor
@Override
public Iterator<Person> iterator() {
return personList.iterator();
}
}
Run Code Online (Sandbox Code Playgroud)
只有实现Iterable接口和数组的类才是.映射不实现Iterable,而是提供三个不同的可迭代视图(键集,值集合和条目集),您可以迭代它们.因此,更完整的检查将是:
return obj instanceof Iterable || obj.getClass().isArray();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9569 次 |
最近记录: |