【问题标题】:How to go through HashMap and compare the object's data and replace the value for HashMap?如何通过HashMap并比较对象的数据并替换HashMap的值?
【发布时间】:2021-11-20 03:14:28
【问题描述】:

我很难写几行代码。我目前所有的代码都在:https://github.com/anabeen/MeetingJava

我遇到的问题是,找到一种合适的方法来遍历 hashmap 并获取具有重叠时间的会议并替换它们。

        Map<LocalDate, Set<Meeting>> meetings = new HashMap<LocalDate, Set<Meeting>>();

假设我们有一个 HashMap [{2011-03-21=[objectMeeting1, objectMeeting2]}] 我们需要将 objectMeeting3 添加到该 hashMap 中。如何选择键“2011-03-21”来查看该哈希图中的对象并将其中的对象集与新的 objectMeeting3 的时间(来自对象的部分数据)进行比较,然后替换该对象?

在 GitHub 中,我试图通过 MeetingSchedulerTest()。这就是我被困的地方:

           Meeting meeting = extractMeeting(employeeId, requestLines[i], 
                    officeStartTime, officeFinishTime, meetingSlotRequest1);
            
            

            
            if(meetings.containsKey(meetingDate)){              

                // if the order overlaps
                for (Map.Entry<LocalDate, Set<Meeting>> meetingEntry : meetings.entrySet()) {
                    if (meetingDate == meetingEntry.getKey())
                    {
                        Set<Meeting> setOfMeeting = meetingEntry.getValue();
                        for (Meeting m : setOfMeeting) {
                            
                        }
                    }
                    
                }
                
                // if the order doesn't
                
                if (meetings.get(meetingDate) != null) 
                    //shouldNotHaveOverlappingMeetings
                {                               
                    System.out.println("HERES?"); 
                    
                    meetings.remove(meetingDate);
                    Set<Meeting> meetingsForDay = new HashSet<Meeting>();
                    meetingsForDay.add(meeting);
                    meetings.put(meetingDate, meetingsForDay);
                }  else
                {
                    System.out.println("HERES2?"); 
                    meetings.get(meetingDate).add(meeting);
                }
                
                }else if (meeting != null){
                    // if meeting doens't have meetingDate then create a new HashMap with date & Meeting
                System.out.println("HERES3?");
                Set<Meeting> meetingsForDay = new HashSet<Meeting>();
                meetingsForDay.add(meeting);
                meetings.put(meetingDate, meetingsForDay);
            }
            
        }

【问题讨论】:

    标签: java hashmap set


    【解决方案1】:

    我用这个找到了答案:

                for (Map.Entry<LocalDate, Set<Meeting>> meetingEntry : meetings.entrySet()) {
                    if (meetingDate.equals(meetingEntry.getKey()))
                    {                   
                        System.out.println("HERES1? ");
                        Set<Meeting> setOfMeeting = meetingEntry.getValue();
                        for (Meeting m : setOfMeeting) {
                            System.out.println("comparing time? " + m.getStartTime().getHourOfDay() + " TO " 
                        + meeting.getStartTime().getHourOfDay());
                            if (m.compareTo(meeting) == 0) {
                                continue;
                            } else {
                                setToPut.add(m);
                            }
                        }
                    }
                }
    

    【讨论】:

    • 您不需要——也不应该——循环访问entrySet。只需写Set&lt;Meeting&gt; setOfMeeting = meetings.get(meetingDate)
    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 2023-03-30
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多