Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将迭代器包装为给定大小的批处理_Java_Iterator - Fatal编程技术网

Java 如何将迭代器包装为给定大小的批处理

Java 如何将迭代器包装为给定大小的批处理,java,iterator,Java,Iterator,我有一个实现接口的对象实例 如何将其转换为迭代器,每次调用next()时,该迭代器将返回一个预定义大小的对象列表(一个批) 爪哇8 试试这样的方法: import java.util.ArrayList; import java.util.Iterator; import java.util.List; class MyIterator implements Iterator<Integer> { @Override public boolean hasNext()

我有一个实现接口的对象实例

如何将其转换为迭代器,每次调用next()时,该迭代器将返回一个预定义大小的对象列表(一个批)


爪哇8

试试这样的方法:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

class MyIterator implements Iterator<Integer> {
    @Override
    public boolean hasNext() {
        return 0 <= i && i < x.length;
    }

    @Override
    public Integer next() {
        return x[i++];
    }

    private Integer i = 0;
    private Integer[] x = new Integer[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
}

class MyBatchIterator {
    MyBatchIterator(MyIterator myIterator, int n) {
        this.myIterator = myIterator;
        this.n = n;
    }

    public boolean hasNext() {
        return myIterator.hasNext();
    }

    public List<Integer> next() {
        List<Integer> list = new ArrayList<>(n);
        for (int i = 0; i < n; i++)
            if (myIterator.hasNext()) list.add(myIterator.next());
        return list;
    }

    final MyIterator myIterator;
    final int n;
}

class Main {
    public static void main(String[] args) {
        MyBatchIterator myBatchIterator = new MyBatchIterator(new MyIterator(), 3);
        while (myBatchIterator.hasNext())
            System.out.println(myBatchIterator.next());
    }
}
import java.util.ArrayList;
导入java.util.Iterator;
导入java.util.List;
类MyIterator实现了迭代器{
@凌驾
公共布尔hasNext(){

返回0我不知道已经有类似的东西可用。您必须创建自己的
迭代器才能执行此操作。但这应该不会太难。如果有困难,请尝试返回;)是否可以使MyBatchIterator具有遗传性,以便它可以接收任何实现迭代器的类?
class MyBatchIterator<E> {
    MyBatchIterator(Iterator<E> iterator,int n) {
        this.iterator=iterator;
        this.n=n;
    }
    public boolean hasNext() {
        return iterator.hasNext();
    }
    public List<E> next() {
        List<E> list=new ArrayList<>(n);
        for(int i=0;i<n;i++)
            if(iterator.hasNext()) list.add(iterator.next());
        return list;
    }
    final Iterator<E> iterator;
    final int n;
}