![](/img/trans.png)
[英]In Java, How to remove duplication from an ArrayList<StringBuilder> efficiently?
[英]How to remove the StringBuilder object from an ArrayList?
我正在嘗試從 ArrayList 中刪除StringBuilder
ArrayList
,但我無法做到這一點。 如果我通過這條線al.remove("haiti");
那是一個字符串 object 並且不等於StringBuilder
並且它返回false
。 我嘗試使用al.remove(new StringBuilder("haiti"))
,但效果不佳。 任何人都可以幫忙嗎?
import java.util.*;
public class HelloWorld {
public static void main(String[] args) {
List<StringBuilder> al = new ArrayList<>();
al.add(new StringBuilder("3")); // [3]
al.add(new StringBuilder("haiti")); // [3, haiti]
System.out.println(al); // [3, haiti]
System.out.println(al.remove(new StringBuilder("haiti")));
// false, but I want true XD
System.out.println(al); // Actual [3, haiti], Expected: [3]
}
}
StringBuilder
的目的是作為一個臨時的 object 用於在幾個步驟中構造一個String
。 它不會覆蓋equals
和hashCode
,因此沒有兩個StringBuilder
實例是相等的,即使它們具有相同的內容(可以在每個實例中更改)。 從List
中刪除一個的唯一方法是通過索引或將引用傳遞給相同的 object 本身。
也就是說,將StringBuilder
放入這樣的列表中沒有多大意義; StringBuilder
通常只存在於單個方法中,然后返回其toString()
結果。 您可能應該以完全不同的方式處理您的數據。
正如 chrylis 所說,在這種情況下不了解StringBuilder
的用法。
我猜你會使用String
而不是StringBuilder
。 就像是:
public class HelloWorld {
public static void main(String[] args) {
List<String> al = new ArrayList<>();
al.add("3"); // [3]
al.add("haiti"); // [3, haiti]
System.out.println(al); // [3, haiti]
System.out.println(al.remove("haiti"));
System.out.println(al);
}
}
你怎么看?
由於Java 8您可以使用removeIf
方法:
List<StringBuilder> al = new ArrayList<>();
al.add(new StringBuilder("3"));
al.add(new StringBuilder("haiti"));
System.out.println(al); // [3, haiti]
// if the string contained in StringBuilder is equal to the
// desired string, then remove this element from the list
System.out.println(al.removeIf(sb -> sb.toString().equals("haiti"))); // true
System.out.println(al); // [3]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.