代码之家  ›  专栏  ›  技术社区  ›  Ashish Lohia

将java对象转换为数组或其值列表

  •  1
  • Ashish Lohia  · 技术社区  · 7 年前

    class User {
        String id;
        String name;
        String job;
    
        // constructors here
    }
    

    User u = new User("1", "Ash", "dev");
    

    ["1", "Ash", "dev"] 另外,我需要根据字段维护值的顺序。

    2 回复  |  直到 7 年前
        1
  •  1
  •   AxelH    7 年前

    这里有一个简单的解决方案,使用反射总是以相同的顺序输出值。

    这并不完美,但这里的想法是展示如何使用 应该 保持不变。名字在这里。

    public static void toArray(Object o){
        List<String> list;
    
        list = Arrays
                .stream(o.getClass().getDeclaredFields())
                .sorted((f1, f2) -> f1.getName().compareTo(
                        f2.getName())).map(f -> {
                    try {
                        return Optional.ofNullable(f.get(o));
                    } catch (Exception e) {
                        return Optional.empty();
                    }
                })
                .map(opt -> opt.orElse("null"))
                .map(Object::toString)
                .collect(Collectors.toList());
    
        System.out.println(list);
    }
    

    一个简单的例子

    public static void main(String[] args) {
        toArray(new TestClass("Foo", 1, 2L));
        toArray(new TestClass("Bar", 3, 4L));
        toArray(new TestClass(null, 5, 6L));
    }
    

    [1,2,Foo]

    [5,6,空]

    对于更完整的解决方案,我将使用注释来设置每个值的位置,但也可以忽略一些字段。

        2
  •  0
  •   AxelH    7 年前

    你可以用很多方法做到这一点!

    toString 方法就是你想要的!

    @Override
    public String toString(){
        return "[" + id + "," + name + "," + job + "]";
    }
    

    然后你可以使用 split() String 类来访问字段。

    您还可以使用另一个方法,该方法返回包含所需字段的字符串数组。