For Array with ArrayList - 按数据处理数据

时间:2013-06-04 22:09:21

标签: java for-loop arraylist

我有以下代码,一个for循环。我想在每次迭代中处理少量数据。

ArrayList uniqueSTA = q.getUniqueStations("localserver");

返回代表STA的ArrayList个字符串,假设是一台计算机(名称,价格等)

dadosSTA = q.getStationData(uniqueSTA.get(i).toString(), "localserver");

dadosSTA表示ArrayListDados个对象,它包含有关特定计算机的所有信息,如名称,价格等。

dataForPPong = p.detectPP(5, 3, dadosSTA);

是检测事件。

现在我需要由STA为每个STA和STA执行此操作。

伪代码:

  1. 获取所有STA - >返回类似STA1,STA2,STA3,STA4 ...
  2. 的内容
  3. 从STA1获取所有数据
  4. 检测STA1的PP
  5. 保存在数组中
  6. 返回1)并为STA2做等等
  7. 这是我的代码。

        ArrayList<Dados> dadosSTA = new ArrayList<>();
        ArrayList<Dados> dataForPPong = new ArrayList();
    
        ArrayList uniqueSTA = q.getUniqueStations("localserver");
    
        for(int i = 0; i<uniqueSTA.size(); i++)
        {
    
            dadosSTA = q.getStationData(uniqueSTA.get(i).toString(), "localserver");
    
            dataForPPong = p.detectPP(5, 3, dadosSTA);
    
        }
    

    修改

    似乎我不清楚,所以这里解释了我的问题:

    假设数组dadosSTA有[STA1],然后[STA1]用p.detectPP处理。下一个循环dadosSTA有[STA1,STA2],它用p.detectPP处理,但问题是STA1之前已经处理过了。 对于所有下一个周期都会发生相同的情况,例如第3个dadosSTA具有[STA1,STA2,STA3],并且它使用p.detectPP进行处理,但STA1和STA2已在先前的循环中处理。

    我想要的是调整代码,以便不处理之前已经处理过的内容,并且我非常确定问题出在for循环中。

    由于

1 个答案:

答案 0 :(得分:0)

如果我理解你的观点正确..你的问题是你正在处理数据列表..解决方案很简单..我编辑了你的代码:

            HashMap<String, Boolean> processedList = new HashMap<String, Boolean>();

然后

            String nameSTA = "localserver";
            if (!processedList.containsKey(nameSTA) || !processedList.get(nameSTA)) {

                processedList.put(nameSTA, false);
                ArrayList<Dados> dadosSTA = new ArrayList();
                ArrayList<Dados> dataForPPong = new ArrayList();

                ArrayList uniqueSTA = q.getUniqueStations(nameSTA);

                for (int i = 0; i < uniqueSTA.size(); i++) {

                    dadosSTA = q.getStationData(uniqueSTA.get(i)
                            .toString(), nameSTA);
                    dataForPPong = p.detectPP(5, 3, dadosSTA);
                }
                processedList.put(nameSTA, true);
            }

我认为STA#1名称是“localserver”..所以我检查它是否存在于processedList中,或者它是否存在于false状态..所以你可以处理它..

====== update ======

如果您将STA1,STA2放在一起,它将是一个不同的实现:

HashMap<String, Boolean> processedList = new HashMap<String, Boolean>();

然后

ArrayList<Dados> dadosSTA = new ArrayList();
ArrayList<Dados> dataForPPong = new ArrayList();

ArrayList uniqueSTA = q.getUniqueStations("localserver");

for (int i = 0; i < uniqueSTA.size(); i++) {
    String dtl=uniqueSTA.get(i).toString();


    if (!processedList.containsKey(dtl) || !processedList.get(dtl)) {
        dadosSTA = q.getStationData(dtl, "localserver");
        dataForPPong = p.detectPP(5, 3, dadosSTA);
        processedList.put(nameSTA, true);
    }
}

我认为dtl是一个独特的值..