获取ArrayList <string>中的第二个相同值

时间:2015-06-09 11:36:02

标签: java arraylist

当我在New direction arrayList中找到第二个mergeArray值时,我正在尝试将标记3添加到a​​rrayList buffer,但我总是得到第一个3 1}} ArrayList中的值。我怎样才能在阿姆斯特丹之后获得第二个?

我感谢任何帮助。

输出:

paris
3
water
ball
money
Amsterdam
3
door

输出应如下所示:

paris
3
water
ball
money
New direction
Amsterdam
3
door

代码:

    public static void main(String[] args) {

    ArrayList<String> buffer = new ArrayList<String>();
    ArrayList<String> mergeArray = new ArrayList<String>();

    String route = "3";
    String direction = "paris";
    String start = "Amsterdam";

    buffer.add("paris");
    buffer.add("3");
    buffer.add("water");
    buffer.add("ball");
    buffer.add("money");
    buffer.add("Amsterdam");
    buffer.add("3");
    buffer.add("door");

    for (String line : buffer) {
        if (line.equals(route)) {
            mergeArray.add(line);
            int index = buffer.indexOf(line);
            String prevElement = buffer.get(index - 1);
            if (prevElement == direction) {
                String addElem = buffer.get(index + 1);
                mergeArray.add(addElem);

            } else if (prevElement == start) {
                mergeArray.add("New direction");

            }

        }

    }
    for (String key : mergeArray) {
        System.out.println(key);
    }

}

2 个答案:

答案 0 :(得分:1)

请勿使用indexOf,因为它始终会检索首次出现的索引。

保留一个辅助索引变量并在循环中使用它:

int auxIndex = 0;
for (String line : buffer) {
        if (line.equals(route)) {
            mergeArray.add(line);           
            String prevElement = buffer.get(auxIndex - 1);
            if (prevElement.equals(direction)) {
                String addElem = buffer.get(auxIndex + 1);
                mergeArray.add(addElem);

            } else if (prevElement.equals(start)) {
                mergeArray.add("New direction");

            }

        }
        auxIndex++
}

还添加安全检查,以便索引不会过度/过流

答案 1 :(得分:0)

尝试使用clasic而不是使用Iterable

for (int i=0; i<buffer.size(); i++) {
    String line = buffer.get(i);
    if (line.equals(route)) {
        mergeArray.add(line);           
        String prevElement = buffer.get(i - 1);
        if (prevElement == direction) {
            String addElem = buffer.get(i + 1);
            mergeArray.add(addElem);

        } else if (prevElement == start) {
            mergeArray.add("New direction");

        }

    }
}

另外,请考虑检查上溢/下溢问题。你引用的是index-1和index + 1,如果外观位于第​​一个或最后一个位置,将会引起麻烦。