加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java-如何使用toString方法轻松整齐地打印多个对象,这些对象也对

发布时间:2020-12-14 19:30:11 所属栏目:Java 来源:网络整理
导读:我有一个ArrayList成员,每个成员都有自己的信息,包括姓名,年龄,出生日期等,这些信息在打印到终端时用toString方法调用. 这是代码: @Override public String toString() { return "|ID: " + id + "| Name: " + name + "| Age: " + calculateAge(age,LocalDat

我有一个ArrayList成员,每个成员都有自己的信息,包括姓名,年龄,出生日期等,这些信息在打印到终端时用toString方法调用.

这是代码:

@Override
    public String toString() {
        return "|ID: " + id + "| Name: " + name + "| Age: " + 
              calculateAge(age,LocalDate.now()) + "| Tlf.: " + tlfNo + "| Active: " + 
              activeMember + "| Next payment: " + nextPayment + "|";
    }

这是输出:

|ID: 12| Name: Casper| Age: 49| Tlf.: 12345678| Active: true| Next payment: 2018-02-12|
|ID: 13| Name: Allan| Age: 69| Tlf.: 12345678| Active: true| Next payment: 2018-01-12|
|ID: 16| Name: Christina| Age: 100| Tlf.: 12345678| Active: false| Next payment: 2018-02-04|
|ID: 19| Name: RICK| Age: 49| Tlf.: 12345678| Active: false| Next payment: 2018-04-14|

如何获得不同的信息,使它们彼此对齐?

最佳答案
您可以为此创建一个方法,因为toString根本无法使用:

static String printPojos(Pojo... pojos) {
    int maxName = Arrays.stream(pojos)
                        .map(Pojo::getName)
                        .mapToInt(String::length)
                        .max()
                        .orElse(0);

    int maxId = Arrays.stream(pojos)
                      .mapToInt(x -> x.getName().length())
                      .max()
                      .orElse(0);

    StringJoiner result = new StringJoiner("n");
    for (Pojo pojo : pojos) {
        StringJoiner sj = new StringJoiner("|");
        sj.add("ID: " + Strings.padEnd(Integer.toString(pojo.getId()),maxId,' '));
        sj.add(" Name: " + Strings.padEnd(pojo.getName(),maxName,' '));
        sj.add(" Age: " + Strings.padEnd(Integer.toString(pojo.getAge()),3,' '));
        sj.add(" Active: " + Strings.padEnd(Boolean.toString(pojo.isActive()),5,' '));

        result.merge(sj);
    }

    return result.toString();
}

我正在使用Strings :: padEnd(来自番石榴,但这即使没有外部库也很容易编写).

在我的情况下,Pojo看起来像这样:

static class Pojo {

    private final int id;
    private final String name;
    private final int age;
    private final boolean active;

    // constructor,getters

}

结果看起来像:

    Pojo one = new Pojo("Casper",49,true,1);
    Pojo two = new Pojo("Allan",100,10_000);

    System.out.println(printPojos(one,two));



ID: 1    | Name: Casper| Age: 49 | Active: true 
ID: 10000| Name: Allan | Age: 100| Active: true 

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读