如何摆脱arraylist中的相邻字符串?

时间:2015-04-17 22:25:04

标签: java

我应该使用什么命令arraylist来摆脱相邻的字符串。假设我有一个allOrders<String>

的arraylist
Crushed Turtle
10 Coins Off
10 Coins Off
Mushroom Veal

在上面的示例中,我不应该获得相同内容的2个相邻行。我应该使用什么方法的arraylist?

注意:只应删除/替换相邻的。以下是合法的:

Firey Flower Pasta
Crushed Turtle
Firey Flower Pasta
Crushed Turtle

4 个答案:

答案 0 :(得分:5)

您可以从列表中获取迭代器,遍历整个列表并跟踪最新值。如果当前值等于最新值,则将其删除。

这样的事情:

Iterator<String> iterator = allOrders.iterator();
String latest = "";
while (iterator.hasNext()) {
  String current = iterator.next();
  if (current.equals(latest)) {
    iterator.remove();
  }
  latest = current;
}

答案 1 :(得分:2)

编写自己的循环,迭代一对元素,如果它们相等,则删除其中一个(您可以使用remove(index)中的List)。

for (int i=list.size()-1; i>0; i--){
    if (list.get(i-1).equals(list.get(i))){
        list.remove(i);
    }
}

我更喜欢从头到尾迭代以避免元素转移的问题。

样本:

List<String> list = new ArrayList<>();
list.add("Crushed Turtle");
list.add("10 Coins Off");
list.add("10 Coins Off");
list.add("10 Coins Off");
list.add("Mushroom Veal");

for (int i = list.size() - 1; i > 0; i--) {
    if (list.get(i - 1).equals(list.get(i))) {
        list.remove(i);
    }
}
System.out.println(list);

输出:[Crushed Turtle, 10 Coins Off, Mushroom Veal]

答案 2 :(得分:2)

没有内置方法可以执行您想要的操作,但您可以创建列表的剥离副本(stripped),如下所示:

List<String> stripped = new ArrayList<String>();
String latestOrder = null;

for (String order : allOrders) {
    if (!order.equals(latestOrder)) {
        stripped.add(order);
    }
    latestOrder = order;
}

答案 3 :(得分:0)

这很有效。迭代List并比较连续元素,如果两个等于你删除其中一个元素。

 ArrayList<String> l = new ArrayList<String>();
        l.add("a");
        l.add("b");
        l.add("b");
        l.add("b");
        l.add("b");
        l.add("d");
        System.out.println(l);
        for(int i = 0; i < l.size() - 1; i++){
            if(l.get(i).equals(l.get(i+1))){
                l.remove(i+1);
                i--;
            }
        }
        System.out.println(l);