如何循环浏览特定startDate的List of Map?

时间:2018-02-02 03:20:05

标签: java arraylist hashmap

我有以下类型的散列图

HashMap<String,List<Training>> map=new HashMap<String,List<Training>>(); 

Input:
        topicName   startDate   endDate     Trainer  Venue
        css         01-10-2017  11-11-2017  ccc      hyd
        html        01-10-2017  12-11-2017  www      viz
        python      10-10-2017  12-11-2017  www      viz  

输入日期:01-10-2017

要显示的属性/值如下所示:

Output:
    topicName   startDate   endDate     Trainer  Venue
    css         01-10-2017  11-11-2017  ccc      hyd
    html        01-10-2017  12-11-2017  www      viz

我需要从getList()中检索列表的详细信息。我需要在此方法中编写什么代码,以便当用户输入日期时,我可以按照上面所示的方式显示输出。

public List<Training> getList(String fromDate) {

   }

   public static void main(String args[]) throws ParseException{
       Map<String,List<Training>> map = new HashMap<String,List<Training>>();
       Scanner sc = new Scanner(System.in);
       System.out.println("Give me a size ");
       int n = sc.nextInt();
       for (int i = 0; i < n; i++){
           String topicName = sc.next();
           //DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
           //Date fromDate = dateFormat.parse(sc.next());
           //Date toDate = dateFormat.parse(sc.next());
           String fromDate = sc.next();
           String toDate = sc.next();
           System.out.println("fromDate********"+fromDate);
           String trainer = sc.next();
           String venue = sc.next();
           List<Training> l1=new ArrayList<Training>();
           l1.add(new Training(topicName,fromDate,toDate,trainer,venue));
           //System.out.println("list********"+l1);
           if(!map.containsKey(fromDate)){
               map.put(fromDate,l1);
           }else{
               map.get(fromDate).add(new Training(topicName,fromDate,toDate,trainer,venue));
           }
       }    
       System.out.println("map********"+map);
   }


@Override
public String toString() {
    return  gettopicName()  + getfromDate() +  gettoDate() +  gettrainer() + getvenue() ;
}

2 个答案:

答案 0 :(得分:0)

因为,fromDate是您Map的关键。然后,您只需get方法即可获得List<Training>

return map.get(fromDate);

如果指定密钥没有值,则返回null

答案 1 :(得分:0)

尝试以下代码,而不是根据日期创建地图保留培训列表。如果用户输入日期迭代训练以过滤它。

public List<Training> getList(List<Training> trainingList, Date date) {
    List<Training> list = new ArrayList<Training>();
    for( Training training : trainingList ) {
        if( training.getFromDate().getTime() <= date.getTime() &&
                date.getTime() <= training.getToDate().getTime()    ) {
            list.add(training);
        }
    }
    return list;
}

   public static void main(String args[]) throws ParseException{
       Scanner sc = new Scanner(System.in);
       List<Training> l1=new ArrayList<Training>();
       System.out.println("Give me a size ");
       int n = sc.nextInt();
       for (int i = 0; i < n; i++){
           String topicName = sc.next();
           DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
           Date fromDate = dateFormat.parse(sc.next());
           Date toDate = dateFormat.parse(sc.next());
           System.out.println("fromDate********"+fromDate);
           String trainer = sc.next();
           String venue = sc.next();
           l1.add(new Training(topicName,fromDate,toDate,trainer,venue));
       }    
       System.out.println("map********"+l1);
   }