微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从 ArrayList 中删除 StringBuilder 对象?

如何解决如何从 ArrayList 中删除 StringBuilder 对象?

我正在尝试从 StringBuilder删除 ArrayList 对象,但我无法这样做。如果我传递这一行 al.remove("haiti");,它是一个字符串对象并且不等于 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 的目的是成为一个临时对象,用于分几个步骤构建 String。它不会覆盖 equalshashCode,因此没有两个 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]

另见:How to use StringBuilder inside the reduce method in java 1.8?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。