【问题标题】:How to remove the StringBuilder object from an ArrayList?如何从 ArrayList 中删除 StringBuilder 对象?
【发布时间】:2021-04-28 05:04:16
【问题描述】:

我正在尝试从ArrayList 中删除StringBuilder 对象,但我无法这样做。如果我通过这条线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]
    }
}

【问题讨论】:

    标签: java string arraylist stringbuilder


    【解决方案1】:

    StringBuilder 的目的是作为一个临时对象,用于在几个步骤中构造String。它不会覆盖equalshashCode,因此不会有两个StringBuilder 实例相等,即使它们具有相同的内容(每个都可以更改)。从List 中删除一个的唯一方法是通过索引或将引用传递给同一对象本身。

    也就是说,将StringBuilder 放入这样的列表没有多大意义; StringBuilder 通常只存在于单个方法中,然后返回其 toString() 结果。您可能应该以完全不同的方式处理您的数据。

    【讨论】:

      【解决方案2】:

      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?

      【讨论】:

        【解决方案3】:

        正如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);
            }
        }
        

        你怎么看?

        【讨论】:

          猜你喜欢
          • 2021-03-11
          • 2015-08-02
          • 1970-01-01
          • 2013-10-13
          • 1970-01-01
          • 2019-08-22
          • 2015-08-05
          相关资源
          最近更新 更多