繁体   English   中英

将模型转换为列表<Object>领域

[英]Convert model to List<Object> of fields

我想找到一种将任何对象转换为其字段的List<Object>的有效方法,例如:

public class User {
   private String name; // John
   private String surname; // Wick
   private int age; // 55
}

最终将作为带有下一个元素的列表: {"John", "Wick", 55}.

我知道我可以使用反射来做到这一点,但是是否有任何 ObjectUtils 或 ReflectionUtils 方法已经这样做了?

我做了一个应该对你有帮助的方法。 您的类必须为每个属性包含一个“getter”。 前任:

name -> getName();

在线示例

用户.java

import java.lang.String;

public class User {
   private String name;
   private String surname;
   private int age; 

  public User(){
    this.name = "John";
    this.surname = "Wick";
    this.age =55;
  }

   public String getName(){
     return this.name;
   }
   public String getSurname(){
     return this.surname;
   }
   public int getAge(){
     return this.age;
   }
}

主程序

import java.util.List;

class Main {
  public static void main(String[] args) {
    User u = new User();

    List<Object> list = ReflexionUtils.getListOfFields(u);
    for(Object o : list){
      System.out.println(o);
    }
  }
}

ReflexionUtils.java

import java.lang.reflect.Field;
import java.util.List;
import java.lang.String;
import java.util.ArrayList;
import java.lang.reflect.InvocationTargetException;    
import java.lang.reflect.Method; 

public class ReflexionUtils {

  public static List<Object>  getListOfFields(Object bean){
    List<Object> result = new ArrayList<Object>();
    for (Field f : bean.getClass().getDeclaredFields()) {
      try{
        String name = f.getName();
          name = name.substring(0,1).toUpperCase() + name.substring(1);
        Method m = bean.getClass().getDeclaredMethod("get"+name, null);
        Object o = m.invoke(bean, null);
        result.add(o);
      } catch (Exception e){
        System.out.println(e.getMessage());
      }
    }
    return result;
  }
}

从列表中打印出来的东西有很多方法,都取决于你想如何打印出来。 当您创建具有给定属性名称、姓氏和年龄的对象时,您可以以任何您想要的方式将它们打印出来。 在您的示例中,我将使用一个数组并将各个元素/属性放在这些索引中。 列表是一个更高级和更灵活的版本,所以我会坚持使用那些。 :-) 下面的代码是我“认为”你正在寻找的。

package ep.list;

import java.util.ArrayList;
import java.util.List;

public class EPList 
{
    public static void main(String[] args) 
    {
        List<User> myuserlist = new ArrayList<>();

        myuserlist.add(new User("John", "Wick", 55));
        myuserlist.add(new User("Thanos", "Bubblegum", 186));
        myuserlist.add(new User("Jiggle", "Puffy", 2));

        for ( User a : myuserlist )
        {
            System.out.println(a.name + " " + a.surname + " " + a.age);
        }
    }

    public static class User 
    {
        private String name; // John
        private String surname; // Wick
        private int age; // 55

        User(String name, String surname, int age)
        {
            this.name = name;
            this.surname = surname;
            this.age = age;
        }
    }
}

为简单起见,重写 User 类的 toString() 方法,然后将其转换为List<Object>

public class User {
    private String name; // John
    private String surname; // Wick
    private int age; // 55

    public User(String name, String surname, int age) {
        this.name = name;
        this.surname = surname;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public String getSurname() {
        return surname;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return ""+getName()+ ", "+getSurname()+", "+getAge()+"";
    }
}

然后转换:

User a  = new User("John","Wick",55);
List<Object> items = Arrays.asList(a.toString().split("\\s*,\\s*"));

它给出了这样的输出:

[John, Wick, 55]

Java 8 转换一个List<object> 至 Map<k,v> 使用对象的孩子的领域?<div id="text_translate"><p> 情况很简单:我有一个 object List&lt;ParentClass&gt; list并想将其转换为Map&lt;orderKey, price&gt;</p><p> class 如下所示</p><pre>class ParentClass{ Child1Class a; Child2Class b; }</pre><p> orderKey class 看起来像这样</p><pre>class orderKey{ String id; String itemName; }</pre><p> 儿童班是这样的</p><pre>class Child1Class{ String id; String itemName; Date date; ..... } class Child2Class{ BigDecimal price; .... }</pre><p> 所有的类都有对应每个字段的 getter 和 setter。 所以我本质上是想 map 孩子们的领域。 我怎样才能做到这一点?</p><pre> -----------------------------MY ATTEMPT IS SOMETHING LIKE THIS-------------------------------------- list.stream(). .collect(Collectors.toMap(ParentClass::getA, ParentClass::getB).entrySet().stream()...... then I'm stuck</pre><p> 不知道如何构建临时 object orderKey作为新 map 的密钥。 任何帮助,将不胜感激。</p></div></k,v></object>

[英]Java 8 convert a List<Object> to Map<K,V> using the fields of the object's children?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 将对象数组列表转换为按 id 分组的模型 Bean 列表 如何将 model 对象列表转换为 object arrays Z93F725A07423FE1C889F448B33ZD 列表 如何使用Java中的对象字段将对象列表转换为映射 Java 8 转换一个List<object> 至 Map<k,v> 使用对象的孩子的领域?<div id="text_translate"><p> 情况很简单:我有一个 object List&lt;ParentClass&gt; list并想将其转换为Map&lt;orderKey, price&gt;</p><p> class 如下所示</p><pre>class ParentClass{ Child1Class a; Child2Class b; }</pre><p> orderKey class 看起来像这样</p><pre>class orderKey{ String id; String itemName; }</pre><p> 儿童班是这样的</p><pre>class Child1Class{ String id; String itemName; Date date; ..... } class Child2Class{ BigDecimal price; .... }</pre><p> 所有的类都有对应每个字段的 getter 和 setter。 所以我本质上是想 map 孩子们的领域。 我怎样才能做到这一点?</p><pre> -----------------------------MY ATTEMPT IS SOMETHING LIKE THIS-------------------------------------- list.stream(). .collect(Collectors.toMap(ParentClass::getA, ParentClass::getB).entrySet().stream()...... then I'm stuck</pre><p> 不知道如何构建临时 object orderKey作为新 map 的密钥。 任何帮助,将不胜感激。</p></div></k,v></object> Java 8 Stream convert list to map, where map key is an object derived from two fields of the list? 将具有Avro字段的对象转换为json 将列表对象[]转换为MultiMap 将对象数组转换为列表 转换清单 <Object[]> 到JSON 将 List 的字段映射到单个 Object 的字段
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM