Java:将List <object>转换为Map <string,list <string =“”>&gt;

时间:2015-12-09 20:03:16

标签: java dictionary

我目前正从数据库中获取数据:

Model---Year
aaaaa---2010
aaaaa---2011
aaaaa---2012
bbbbb---2010
bbbbb---2011

我通过SQL语句,getJdbcTemplate和ResultSet获取此数据。然后将其存储在值对象列表中:

List<ModelAndYear> modelYearList = new ArrayList<ModelAndYear>();

我的ModelAndYear类是这样的:

public class ModelAndYear{
   private String model;
   private String year;

   public String getModel() {
       return model;
   }
   public void setModel(String model) {
       this.model= model;
   }
   public String getYear() {
       return year;
   }
   public void setYear(String year) {
       this.year= year;
   }

如何获取填充的modelYearList,其数据的格式为:

aaaaa,2010
aaaaa,2011
aaaaa,2012
bbbbb,2010
bbbbb,2011

并将其分类为

的格式
Map<String, List<String>> 

所以数据的格式为:

aaaaa,<2010,2011,2012>
bbbbb,<2010,2011>

我不知道从哪里开始。

我有:

Map<String, List<String>> newModelYearList = new HashMap<String, List<String>>();
        for(int i=0; i < modelYearList.size(), i++){
           //sorting will occur here i think?     
           //how do i program the action of getting model from list 1 and checking if it exists in list 2?
        }

3 个答案:

答案 0 :(得分:3)

只要您拥有Java 8,就可以使用流一次性完成此操作。

您实际上要做的是groupBy功能,但也应用map。以下是您正在寻找的内容(为了清晰起见,添加了大量缩进):

Map<String, List<String>> yearsByModel = 
    modelYearList
        .stream()
        .collect(
            Collectors.groupingBy(
                may -> may.getModel(),        
                Collectors.mapping(may -> may.getYear(), Collectors.toList())));

答案 1 :(得分:0)

我不想只是给出代码,你应该尝试自己做。

这是你应该做的:

  1. 创建一个包含字符串和列表的新地图,就像您想要的那样,例如将其称为结果

  2. 循环遍历modelYearList

  3. 中的每个元素
  4. 获取模块并检查结果映射是否已包含具有相同模块字符串的键

  5. 如果是,请获取与模块一起存储的列表,并添加年份

  6. 如果没有,请创建一个新的类型字符串列表并添加年份,并将其存储在带有模块名称的结果中

  7. 注意:我将使用HashSet和HashMap,但如果需要,也可以使用List和Map

    2015-10-21T05:06:25.380-05:00
    

答案 2 :(得分:0)

此代码根据您的要求提供了结果图:

Map<String, List<String>> resultMap = 
                modelYearList
                    .stream()
                    .collect(
                        Collectors.groupingBy(
                                ModelAndYear::getModel,        
                            Collectors.mapping(ModelAndYear::getYear, Collectors.toList())));
        
        resultMap.forEach((k, v) -> System.out.println(k +" : "+ v.toString()));