簡體   English   中英

如何從 ArrayList 中刪除 StringBuilder object?

[英]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 它不會覆蓋equalshashCode ,因此沒有兩個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]

另請參閱:如何在 java 1.8 的 reduce 方法中使用 StringBuilder?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM