说我有一个自定义类:
public class CustomClass {
private String name;
private String data;
public CustomClass(String name, String data) {
this.name = name;
this.data = data;
}
}
我还有一个自定义类对象的列表:
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"),
};
我更喜欢“内联”解决方案(不创建任何新类)。
说,我需要一个接一个地获取我的CustomClass列表项K = 7次。解决方案应该在CustomClass对象之后检索我:
项目1 第2项 第3项 第4项 第5项 第1项 第2项
答案 0 :(得分:4)
尝试使用索引模数组长度
with open(os.path.join(out_dir, 'extractedLinks.txt'), 'a+', encoding="utf8") as out_file:
links = set() # temp store to ensure uniqueness...
for current_file in file_list:
with open(os.path.join(in_dir, current_file), encoding="utf8") as in_file:
for line in in_file:
try:
link = shlex.split(line)[2] # or whatever other function
if link not in links:
links.add(link)
out_file.write(link + "\n")
except Exception:
continue
因此,当第一个索引(这里名为i)大于或等于列表长度时,它将“重置”它,因为操作模数(%)返回整数除法后留下的内容
编辑:解决方案确实符合要求,没有实例化任何类
希望它有所帮助:)
答案 1 :(得分:1)
试试这个。
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);
}
};
}
和
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);
}
结果:
a
b
c
a
b
答案 2 :(得分:1)
一种简单的方法是:
import com.google.common.collect.Iterables
import com.google.common.collect.Iterators;
Integer[] arr = {1,2,3,4,5};
Iterator<Integer> iter = Iterators.limit(Iterables.cycle(arr).iterator(),7) ;
答案 3 :(得分:1)
这是Java 8友好的方式:
IntStream.range(0, K)
.map(i -> list[i % list.length])
.forEach(cc -> /* play with CustomClass cc instance */);