如何从 ArrayList 中删除 StringBuilder 对象?
How to remove the StringBuilder object from an ArrayList?
我正在尝试从 ArrayList
中删除 StringBuilder
对象,但我做不到。如果我传递这一行 al.remove("haiti");
那是一个字符串对象,不等于 StringBuilder
并且它 returns 到 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
的目的是作为一个临时对象,用于分几步构建一个String
。它不会覆盖 equals
和 hashCode
,因此没有两个 StringBuilder
实例是相等的,即使它们具有相同的内容(可以在每个实例中更改)。从 List
中删除对象的唯一方法是通过索引或将引用传递给同一对象本身。
也就是说,将 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]
另请参阅:
我正在尝试从 ArrayList
中删除 StringBuilder
对象,但我做不到。如果我传递这一行 al.remove("haiti");
那是一个字符串对象,不等于 StringBuilder
并且它 returns 到 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
的目的是作为一个临时对象,用于分几步构建一个String
。它不会覆盖 equals
和 hashCode
,因此没有两个 StringBuilder
实例是相等的,即使它们具有相同的内容(可以在每个实例中更改)。从 List
中删除对象的唯一方法是通过索引或将引用传递给同一对象本身。
也就是说,将 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]
另请参阅: