queue.add(...)返回true但没有元素添加到BlockingQueue

时间:2018-06-18 13:39:36

标签: java queue blockingqueue

我尝试编写一个采用BlockingQueue<列表<串[]> >并将文件路径作为String,并将该文件的每一行添加到队列中,作为包含该行为String []的ArrayList。 (我稍后会在每个ArrayList中添加更多String []。)

例:

-queue = {{A1,A2},{B}}(A1,A2,B,是String [])

-Lines in file = {l1,l2,L3}(l1,l2,l3也是String [])

通缉结果:

-queue = {{A1,A2},{B},{l1},{l2},{l3}}

我的问题是,当我添加一个元素时,queue.add(element)返回true,但没有添加任何元素。

到目前为止我的代码:

public boolean loadOneFile(BlockingQueue<List<String[]>> queue, String path) throws IOException, InterruptedException {

        CSVReader reader = new CSVReader(new FileReader(path), Main.separator.toCharArray()[0], '"', false);

        // Skip header
        int headerSize = reader.readNext().length;
        while (reader.isHasNext()) {
            String[] line = reader.readNext();
            ArrayList<String[]> rowInQueue = new ArrayList<String[]>();
            rowInQueue.add(line); // this line does work
            boolean test = queue.add(rowInQueue);// the variable "test" becomes true...
            int debug = queue.size(); // ...but the variable "debug" stays to 1...
            // ...and queue does not change and only has the same "kinda-empty" element from initialisation.    
            }

        }       
            reader.close();
        return true;
    }

使用包含String [1]和“”:

的列表初始化队列
BlockingQueue<List<String[]>> toProcessQueue = new LinkedBlockingQueue<List<String[]>>(50000);
    String[] emptyLine = { "" };

    ArrayList<String[]> emptyCombinaison = new ArrayList<String[]>();
    emptyCombinaison.add(emptyLine);

    BlockingQueue<List<String[]>> emptyQueue = new LinkedBlockingQueue<List<String[]>>();
    boolean test = toProcessQueue.add(emptyCombinaison);

上下文:在类中调用该方法。参数是类的受保护的volatile属性。

更广泛的上下文:这是我的第一步,让一个文件的每一行与另一个文件的每一行匹配的队列。或任意数量的大文件。 例如2个文件: file1:{A,B} +文件2:{a,b,c} - &gt;队列:{{A,a},{A,b},{A,c},{B,a},{B,b},{B,c}}(顺序无关紧要) 奖励:它必须适用于大文件,必要时等待队列清空。

我的问题是:

1)对于第一步(队列中的1个文件),可能有一个更简单(因此更可靠)的方法吗?

2)有没有更简单的方法来完成第二步(2个文件的“笛卡尔积”)?

3)为什么.add(elmt)在这种特殊情况下没有效果?

感谢。

0 个答案:

没有答案