首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在java的数组列表中存储数据列?

如何在java的数组列表中存储数据列?
EN

Stack Overflow用户
提问于 2021-08-20 14:11:20
回答 1查看 505关注 0票数 0

嗨各位,我有一个Map,即字符串存储头和对象列表,分别存储它们的值。我想将数据逐个存储在数组列表中,如下所示。

这是我想要存储在数组列表中的数据格式:-

代码语言:javascript
复制
 [ Pojo(foo1=636580, foo2=CIVIL, foo3=29/06/2021),
     Pojo(foo1=636580, foo2=CIVIL, foo3=29/06/2021),
     Pojo(foo1=636580, foo2=CIVIL, foo3=29/06/2021), 
     Pojo(foo1=636580, foo2=CIVIL, foo3=29/06/2021), 
     Pojo(foo1=636580, foo2=CIVIL, foo3=29/06/2021), 
   ]

但数据存储如下:

代码语言:javascript
复制
[
     Pojo(foo1=636580, foo2=N/A, foo3=N/A),
     Pojo(foo1=636580, foo2=N/A, foo3=N/A),
     Pojo(foo1=636580, foo2=N/A, foo3=N/A), 
     Pojo(foo1=636580, foo2=N/A, foo3=N/A), 
     Pojo(foo1=636580, foo2=N/A, foo3=N/A), 
     
     Pojo(foo1=N/A, foo2=CIVIL  , foo3=N/A), 
     Pojo(foo1=N/A, foo2=CIVIL  , foo3=N/A), 
     Pojo(foo1=N/A, foo2=CIVIL  , foo3=N/A), 
     Pojo(foo1=N/A, foo2=CIVIL  , foo3=N/A), 
     Pojo(foo1=N/A, foo2=CIVIL  , foo3=N/A),


     Pojo(foo1=N/A, foo2=N/A, foo3=29/06/2021),
     Pojo(foo1=N/A, foo2=N/A, foo3=29/06/2021),
     Pojo(foo1=N/A, foo2=N/A, foo3=29/06/2021),
     Pojo(foo1=N/A, foo2=N/A, foo3=29/06/2021),
     Pojo(foo1=N/A, foo2=N/A, foo3=29/06/2021)
]

这是我的pojo课程:-

代码语言:javascript
复制
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Pojo {
    private String foo1= "N/A";
    private String foo2= "N/A";
    private String foo3= "N/A";
}

这是我的密码:-

代码语言:javascript
复制
Map<String, List<Object>> myMap = new HashMap<>();
        List<String> strings = new ArrayList<>();
        strings.add("foo1");
        strings.add("foo2");
        strings.add("foo3");

        List<Pojo> pojos = new ArrayList<>();
        for (String string : strings) {
            Pojo pojo = new Pojo();
            for (Map.Entry<String, List<Object>> entry : myMap.entrySet()) {
                int max = myMap.values().stream().map(List::size).max(Integer::compareTo).get() - 1;
                if (entry.getKey().equalsIgnoreCase(string)) {
                    while (max >= 0) {
                        pojo = getPropertyValue(entry.getKey(), entry.getValue().get(max), pojo);
                        pojos.add(pojo);

                        max--;
                    }
                }
            }
        }
        System.out.println(pojos);

这是我的getPropertyValue方法:-

代码语言:javascript
复制
Class<?> unreconciledTransactionClass = Class.forName("com.example.looping.rohit.Pojo"); // convert string classname to class
        Object data;
        if (pojo != null) {
            data = pojo;
        } else {
            data = unreconciledTransactionClass.getDeclaredConstructor().newInstance(); // invoke empty constructor

        }
        PropertyAccessor myAccessor = PropertyAccessorFactory.forBeanPropertyAccess(data);
        myAccessor.setPropertyValue(attributeName, value);
        return (Pojo) data;
    }
EN

回答 1

Stack Overflow用户

发布于 2021-11-06 15:12:46

下面是解决问题的代码。我添加了一个try / catch块,以便在myMap中有不同大小的列表时处理这种情况。

代码语言:javascript
复制
int max = myMap.values().stream().map(List::size).max(Integer::compareTo).get();
List<Pojo> pojos = new ArrayList<>();
for(int i=0; i<max; i++) {
    Pojo pojo = new Pojo();
    for (String string : strings) {
        String value;
        try {
             value = myMap.get(string).get(i);
        }catch(IndexOutOfBoundsException e) {
             value =  "N/A";
        }
        pojo = getPropertyValue(string,value, pojo);
    }
    pojos.add(pojo);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68863649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档