【问题标题】:Method that returns a string of the concatenated elements of an array list返回数组列表的连接元素的字符串的方法
【发布时间】:2020-12-31 14:37:34
【问题描述】:

我有一个 toString 方法,它应该返回一个数组列表的串联元素字符串。我遇到的问题是 T 类型的数组列表(因为它应该是通用的)无法转换为字符串。

public class RandomStuffContainer<T extends Comparable<T>>
{
       ArrayList<T> array = new ArrayList<T>();

    public  void main(String[] args){
     ArrayList<T> array = new ArrayList<T>();

        
    }
public String toString() {
       StringBuilder sb = new StringBuilder();
       ArrayList<String> data = (ArrayList<T>)array.clone();
        for (String s : data)
        {
            sb.append(s);
            sb.append("\t");
    }
         return  data.toString();
    }

【问题讨论】:

    标签: java arraylist methods


    【解决方案1】:

    我遇到的问题是 T 类型的数组列表(因为它应该是通用的)无法转换为字符串。

    您不需要将其转换为字符串。当你想要它的字符串表示时,你只需在对象上调用toString() 方法。

    也不需要 clone(),因为您没有更改 ArrayList 中的任何数据:

    import java.util.*;
    
    public class RandomStuffContainer<T extends Comparable<T>>
    {
        ArrayList<T> array = new ArrayList<T>();
    
        public  void main(String[] args)
        {
            ArrayList<T> array = new ArrayList<T>();
        }
    
        public String toString() 
        {
            StringBuilder sb = new StringBuilder();
            //ArrayList<String> data = (ArrayList<T>)array.clone(); // not needed
    
            //for (String s : array) // no need to use String here            
            for (T s : array)
            {
                //sb.append(s);
                sb.append(s.toString());
                sb.append("\t");
            }
            
            return  sb.toString();
        }
    }
    

    此外,您应该使用 StringJoiner 类,而不是使用 StringBuilder 类。此类会自动为您附加分隔符,并且不会将分隔符添加到最后一个标记。

    上述更改只会让代码编译。它仍然不是一个可用的类,因为您没有向 ArrayList 实际添加数据的方法,并且您必须编写代码来创建 RandomStuffContainer 类的实例。

    【讨论】:

    • 很高兴它有帮助。不要忘记通过单击复选标记(答案旁边)来“接受”答案,这样人们就知道问题已经解决了。
    【解决方案2】:

    下面的代码只是@camickr 回答的后续,给出了一个将Java 8 Stream API 应用于toString 方法所需实现的示例:

    import java.util.*;
    import java.util.stream.*;
    
    public class RandomStuffContainer<T extends Comparable<T>> {
        List<T> array = new ArrayList<T>();
    
        @Override
        public String toString() {
            return array.stream().map(Object::toString).collect(Collectors.joining("\t"));
        }
    
        // provide constructor, add/remove methods, etc. as needed
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-09
      • 1970-01-01
      • 2013-02-04
      • 2013-12-01
      • 1970-01-01
      • 2016-02-20
      • 2017-07-24
      相关资源
      最近更新 更多