0

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

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

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

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

dadosSTA代表和ArrayList对象Dados,它包含有关特定计算机的所有信息,例如名称,价格等。

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

是检测一个事件。

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

伪代码:

  1. 获取所有 STA -> 返回类似 STA1、STA2、STA3、STA4 的内容...
  2. 从 STA1 获取所有数据
  3. 为 STA1 检测 PP
  4. 保存在数组中
  5. 回到 1) 并为 STA2 做,依此类推

这是我的代码。

    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],然后使用 p.detectPP 处理 [STA1]。下一个循环 dadosSTA 有 [STA1,STA2] 并使用 p.detectPP 处理,但这里的问题是 STA1 之前已经处理过。所有接下来的循环都会发生同样的情况,比如第三个 dadosSTA 有 [STA1,STA2,STA3] 并且它是用 p.detectPP 处理的,但是 STA1 和 STA2 已经在前面的循环中处理过了。

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

谢谢

4

1 回答 1

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”..所以我检查它是否存在于已处理列表中,或者它是否以错误状态存在..所以你可以处理它..

======更新======

如果你有 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 是一个独特的价值..

于 2013-06-04T23:06:15.393 回答