Evu*_*sas 3 java iterator generator
假设我有一个自定义类:
public class CustomClass {
private String name;
private String data;
public CustomClass(String name, String data) {
this.name = name;
this.data = data;
}
}
Run Code Online (Sandbox Code Playgroud)
我还有一个自定义类对象的列表:
CustomClass[] list = new CustomClass[] {
new CustomClass("Item 1", "data"),
new CustomClass("Item 2", "data"),
new CustomClass("Item 3", "data"),
new CustomClass("Item 4", "data"),
new CustomClass("Item 5", "data"),
};
Run Code Online (Sandbox Code Playgroud)
如何创建一个迭代器(或者更确切地说,生成器)来遍历列表 K 次(K > list.length),每次都给我下一个元素?
我更喜欢“内联”解决方案(不创建任何新类)。
说,我需要一个接一个地获取我的 CustomClass 列表项 K = 7 次。解决方案应该按照 CustomClass 对象检索我:
小智 5
使用索引模数组长度:
for( int i = 0; i < K; i++ ) {
list[ i % list.length ];
}
Run Code Online (Sandbox Code Playgroud)
当涉及到i
大于或等于列表长度的第一个索引(此处称为)时,它将“重置”它,因为操作 modulo ( %
) 返回整数除法后的余数。
该解决方案不引入任何类。
小智 5
尝试这个。
static <T> Iterator<T> circularIterator(List<T> list, int count) {
int size = list.size();
return new Iterator<T>() {
int i = 0;
@Override
public boolean hasNext() {
return i < count;
}
@Override
public T next() {
return list.get(i++ % size);
}
};
}
Run Code Online (Sandbox Code Playgroud)
和
List<String> list = Arrays.asList("a", "b", "c");
for (Iterator<String> i = circularIterator(list, 5); i.hasNext();) {
String s = i.next();
System.out.println(s);
}
Run Code Online (Sandbox Code Playgroud)
结果:
a
b
c
a
b
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1924 次 |
最近记录: |