如何迭代List <Map <String,String >>并将其键值添加到Java对象中

时间:2019-08-02 16:31:23

标签: java json hashmap

我有一个具有四个属性的Java对象,我想根据List<Map<String,String>>的结果设置这些属性。

Java类:

class Fruit{ 
    private String apple;
    private String banana;    
    private String mango;   
    private String orange;

    //getter and setters
}

我有一个方法以List<Map<String, String>>的形式返回数据:

[
  {"apple":"sweet","banana":"less sweet","mango":"more sweet","orange":"citric"},
  {"apple":"less sweet","banana":"more sweet","mango":" sweet","orange":"less citric"}
]

我的任务是将这些值映射到Java类对象,以便可以从主方法中返回,例如List<Fruit>

public List<Fruit> getfruits(){

    Fruit f=new Fruit();
    List<Map<String,String>> data=getdetails(returns List<Map<String,String>>)
    for(int i=0;i<data.size;i++){
        Map<String,String> map=data.get(i);

        //Now I want to iterate my map in a such way that it adds objects to my java class and return a list of Fruit object:
        //mapping to getter and setters of my Fruit class

        f.setApple(map.get("apple"));
        f.setMango(map.get("mango");
        f.setBanana(map.get("banana");
        f.setOrange(map.get("orange");

        //But I don't want to hardcode the values in getter and setter methods
    }
}

3 个答案:

答案 0 :(得分:1)

您可以在 ObjectMapper

的帮助下完成此操作
       ObjectMapper mapper = new ObjectMapper();

List<Map<String,String>> dataMap = new ArrayList<>();

    String json = objectMapper.writeValueAsString(dataMap);

List<Fruit> fruits = mapper.readValue(json, new TypeReference<List<Fruit>>() {});

答案 1 :(得分:0)

您可以使用反射。 直 或通过Apache Commons BeanUtils(PropertyUtils。get / setProperty) 或通过其他方式。

答案 2 :(得分:0)

也许像这样:

public List<Fruit> getFruits() {
     List<Fruit> fruits = new ArrayList<Fruit>();
     for (Map<String, String> m : data) {
           Fruit f = new Fruit();
           f.setApple(m.get(“apple”));
           f.setMango(m.get(“mango”));
           f.setBanana(m.get(“banana”));
           f.setOrange(m.get(“orange”));
           fruits.add(f);
     }
     return fruits;
}

编辑:没有看到您不希望它们进行硬编码,因此您需要采用其他方法来设置值。也许制作一个set()方法,该方法具有一个有关要保存的内容和值的参数。

编辑2 :为什么在Fruit类中不仅有一个map变量,而且还没有一种基于键的获取和设置方法?