List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6);
Iterator<Integer> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
Run Code Online (Sandbox Code Playgroud)
上面的代码将按顺序迭代1到6.我们可以交替迭代相同的列表,以便在1, 3, 5不更改while循环的情况下进行打印吗?
dan*_*niu 12
创建自己的Iterator.
class SkippingIterator<T> implements Iterator<T> {
private List<T> list;
private currentPosition;
private int skipBy;
public SkippingIterator(List<T> l) {
this(l, 2);
}
public SkippingIterator(List<T> l, int skip) {
this(l, skipBy, 0);
}
public SkippingIterator(List<T> l, int skip, int startPosition) {
list = l;
skipBy = skip;
currentPosition = startPosition;
}
public boolean hasNext() {
return currentPosition < list.size();
}
public T next() {
T result = list.get(currentPosition);
currentPosition += skip;
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
制作你的代码
List<Integer> list = Arrays.asList(1,2,3,4,5,6);
Iterator it = new SkippingIterator<>(list);
while(it.hasNext()){
System.out.println(it.next());
}
Run Code Online (Sandbox Code Playgroud)
你只想打印奇数?使用流过滤列表:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6);
Iterator<Integer> it = list.stream().filter(x -> x % 2 == 1).iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
Run Code Online (Sandbox Code Playgroud)
编辑:
如果你想获得所有其他元素,那么使用流将不太合适,但你仍然可以这样做:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6);
int limit = list.size() / 2 - (1 - list.size() % 2);
Iterator<Integer> it = IntStream.iterate(0, x -> x + 2).limit(limit).map(list::get).iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
Run Code Online (Sandbox Code Playgroud)
我推荐daniu的解决方案.
一个简单的机制是只使用列表项的索引:
IntStream.range(0, list.size())
.filter(i -> i % 2 == 0)
.mapToObj(list::get)
.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
如果你特别想要一个迭代器,只需要调用iterator()而不是forEach.
是的你可以.在while循环体内,检查迭代器是否有下一个元素,如果有,则再次推进迭代器.这将导致偶数元素不被打印.
List<Integer> list=Arrays.asList(1,2,3,4,5,6);
Iterator it=list.iterator();
while (it.hasNext()){
System.out.println(it.next());
if (it.hasNext()) {
it.next();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
930 次 |
| 最近记录: |