我应该使用什么命令arraylist来摆脱相邻的字符串。假设我有一个allOrders<String>
Crushed Turtle
10 Coins Off
10 Coins Off
Mushroom Veal
在上面的示例中,我不应该获得相同内容的2个相邻行。我应该使用什么方法的arraylist?
注意:只应删除/替换相邻的。以下是合法的:
Firey Flower Pasta
Crushed Turtle
Firey Flower Pasta
Crushed Turtle
答案 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);