【问题标题】:Convert string in list objects to comma separated将列表对象中的字符串转换为逗号分隔
【发布时间】:2014-09-21 04:54:41
【问题描述】:

我有一个对象数组列表,其中对象中的实例变量之一是字符串。 我想将对象列表中的字符串变量转换为单个逗号分隔的字符串。

例如,

我有一个对象雇员如下。

public class Employee {

    private String name;
    private int age;
}

考虑一份员工名单,

List<Employee> empList = new ArrayList<Employee>
Employee emp1 = new Employee ("Emp 1",25);
Employee emp2 = new Employee ("Emp 2",25);
empList.add(emp1);
empList.add(emp2);

预期输出(类型:字符串):

Emp 1,Emp 2

我知道它可以通过循环来完成。但我正在寻找一些复杂的方法来做到这一点并保持代码更简单。

【问题讨论】:

  • 循环播放。没有神奇的“做我认为我想让你做的事”功能......
  • 复杂的方式会在某处包含一个循环。
  • 将循环隐藏在函数后面

标签: java


【解决方案1】:

覆盖Employee 类中的toString() 方法

public String toString() {
   return name;
}

然后,打印列表:

String listToString = empList.toString();
System.out.println(listToString.substring(1, listToString.length() - 1));

这不是那种复杂的打印方式,但我不涉及第三方库的使用。

如果您想使用第三方库,可以通过以下几种方式打印列表。

// Using Guava
String guavaVersion = Joiner.on(", ").join(items);

// Using Commons / Lang
String commonsLangVersion = StringUtils.join(items, ", ");

【讨论】:

  • ... 并且有循环。 OP 想要它没有那个。 (即使那是不可能的......)
  • 强迫症评论:你会有一个额外的,
  • 已修复。现在应该没问题了,虽然这种方法不是我最喜欢的。
  • 最终输出中不需要重复。有什么办法吗?
  • 那你应该把结构改成Set接口的一些实现,因为它不允许重复。
【解决方案2】:

无循环,使用list.toString()

public class Employee {

     public Employee(String string, int i) {
        this.age=i;
        this.name=string;
    }
    private String name;
     private int age;

     @Override
     public String toString() {
           return name + " " + age;
        }

   public static void main(String[] args) {
       List<Employee> empList = new ArrayList<Employee>();
         Employee emp1 = new Employee ("Emp 1",25);
         Employee emp2 = new Employee ("Emp 2",25);
         empList.add(emp1);
         empList.add(emp2);
         System.out.println(empList.toString().
                       substring(1,empList.toString().length()-1));
}
}

打印

Emp 1 25, Emp 2 25

【讨论】:

  • @JonathanDrapeau 这是模拟代码,OP可以根据他的要求删除/添加:)
【解决方案3】:

我想将对象列表中的字符串变量转换为单个逗号分隔的字符串。

  • 实现你自己的toString():

    public String toString() { return name; }
    
  • 在您的java.util.List 上调用方法toString()

    empList.toString();
    
  • 摆脱'['']'

    String s = empList.toString();
    s = s.substring(1, s.length()-1);
    

【讨论】:

  • 这将在输出周围添加类似方括号的绒毛,并且可以更改(即使这不太可能)
  • @PatriciaShanahan 这是真的。但它仍然将整个内容与 List.toString() 的一个实现联系在一起。不可复用的代码不是好代码。
【解决方案4】:

如果您想要一种真正干净的方式来执行此操作,请使用 Java 8 中的函数字面量。否则,

在员工类中:

public String toString() { return name; }

打印出列表,去掉方括号

list.toString().replaceAll("\\[(.*)\\]", "$1");

【讨论】:

    猜你喜欢
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    • 2023-04-02
    • 2014-08-24
    • 2020-04-04
    • 1970-01-01
    相关资源
    最近更新 更多