删除所有出现的密钥只会删除一个密钥

时间:2015-03-15 21:03:33

标签: java

我有以下内容:

        ArrayList<GregorianCalendar> toRemove = new ArrayList<GregorianCalendar>();
SortedSet<GregorianCalendar> copyKeys =  new TreeSet<GregorianCalendar>(MyCalendarTester.myCal.getMyCalHash().keySet());
                        for(GregorianCalendar remove: toRemove){
                                    copyKeys.removeAll(Collections.singleton(remove));

                        }

我正在尝试删除每次出现的密钥&#34;删除&#34;在我的TreeSet copyKeys中。但它似乎只是删除其中一个。有人可以告诉我我做错了什么吗?如果您需要更多信息,请与我们联系。

编辑: 为了它,这是我整个方法的混乱(我知道它还有一些问题只是我要问的问题),但是现在是这样的:

    public void eventList(){

        int year = -1;
        GregorianCalendar tempKey = null;
        ArrayList<Event> tempArr = new ArrayList<Event>();
        ArrayList<GregorianCalendar> toRemove = new ArrayList<GregorianCalendar>();
        int countEnd = 0;

        if(MyCalendarTester.myCal.getMyCalHash().equals(null)){
            System.out.println("Your calendar is empty!");
        }
        else{
            System.out.println("Here are your events: ");
            SortedSet<GregorianCalendar> keys = new TreeSet<GregorianCalendar>(MyCalendarTester.myCal.getMyCalHash().keySet());
            SortedSet<GregorianCalendar> copyKeys =  new TreeSet<GregorianCalendar>(MyCalendarTester.myCal.getMyCalHash().keySet());
            tempKey = keys.first();
            int countTotal = keys.size();
            for(GregorianCalendar key : copyKeys){
                GregorianCalendar copyKey = key;
                Event value = MyCalendarTester.myCal.getMyCalHash().get(key);
//              System.out.println(" key.get(Calendar.MONTH) = " + key.get(Calendar.MONTH));
//              System.out.println("(tempKey.get(Calendar.MONTH)) = " + (tempKey.get(Calendar.MONTH)));
//              System.out.println(" key.get(Calendar.DATE) = " + key.get(Calendar.DATE));
//              System.out.println(" tempKey.get(Calendar.DATE) = " + (tempKey.get(Calendar.DATE)));
                tempArr.add(value);
                countEnd++;
                if(key.get(Calendar.MONTH) == (tempKey.get(Calendar.MONTH))
                        && key.get(Calendar.DATE) == (tempKey.get(Calendar.DATE))
                        && key.get(Calendar.YEAR) == tempKey.get(Calendar.YEAR)){

                        //  tempArr.add(value);
                            if(key.get(Calendar.YEAR) != year){
                                System.out.println(key.get(Calendar.YEAR));
                                year = key.get(Calendar.YEAR);

                                    System.out.println(MyCalendarTester.arrayOfDays[key.get(Calendar.DAY_OF_WEEK) - 1] + ", " + MyCalendarTester.arrayOfMonths[key.get(Calendar.MONTH) - 1] + " "
                                            + key.get(Calendar.DATE) + " ");

                            }

                            toRemove.add(copyKey);
//                          toRemove.add(copyKey);
                            //keys.remove(copyKey);

                }else{
                    //if(count <= 1){
                        //if(tempArr.size() == 1){
                    if(countEnd == countTotal){
                        tempArr.remove(tempArr.size() - 1); 
                    }else{
                        if(tempArr.size() > 1){
                            tempArr.remove(tempArr.size() - 2); 
                        }else{
                            tempArr.remove(tempArr.size() - 1); 
                        }

                        if(toRemove.size() > 0){
                            toRemove.remove(toRemove.size() - 1);
                        }
                    }
                    //  }
//                      else{
//                          tempArr.remove(tempArr.size() - 2); 
//                          toRemove.remove(toRemove.size() - 1);
//                      }
//                      
                    //  count = 0; //reset matches
                    //}

                }
                tempKey = key;


            }
                Collections.sort(tempArr);
                for(Event e: tempArr){

                            if(e.endTime != null){

                                System.out.println("    " + e.eventName + " " + e.startTime.get(Calendar.HOUR_OF_DAY) + ":" + 
                                e.startTime.get(Calendar.MINUTE) + " " + e.endTime.get(Calendar.HOUR_OF_DAY) 
                                + ":" + e.endTime.get(Calendar.MINUTE));
                                //tempKey = key;
                            //  year = key.get(Calendar.YEAR); 
                                //keys.remove(key);
                            }
                            else{
                                System.out.println("    " + e.eventName + " " + e.startTime.get(Calendar.HOUR_OF_DAY) + ":" + 
                                        e.startTime.get(Calendar.MINUTE));
                            //  tempKey = key;
                            //  year = key.get(Calendar.YEAR); 
                                //keys.remove(key);
                            }
                }
                        tempArr.clear();
                        //break;


                        for(GregorianCalendar remove: toRemove){
                                    copyKeys.removeAll(Collections.singleton(remove));

                        }


                for(GregorianCalendar key : copyKeys){
                        Event value = MyCalendarTester.myCal.getMyCalHash().get(key);

                    if(tempArr.size() == 0){
                    if(value.endTime != null){
                        if(key.get(Calendar.YEAR) == year){

                            System.out.println(MyCalendarTester.arrayOfDays[key.get(Calendar.DAY_OF_WEEK) - 1] + ", " + MyCalendarTester.arrayOfMonths[key.get(Calendar.MONTH) - 1] + " "
                                    + key.get(Calendar.DATE) + " " + value.startTime.get(Calendar.HOUR_OF_DAY) + ":" + value.startTime.get(Calendar.MINUTE) + " - " + value.endTime.get(Calendar.HOUR_OF_DAY) 
                                    + ":" + value.endTime.get(Calendar.MINUTE) + " " + value.eventName);
                        //  tempKey = key;

                        }else{
                            System.out.println(key.get(Calendar.YEAR));
                            System.out.println(MyCalendarTester.arrayOfDays[key.get(Calendar.DAY_OF_WEEK) - 1] + ", " + MyCalendarTester.arrayOfMonths[key.get(Calendar.MONTH) - 1] + " "
                                    + key.get(Calendar.DATE) + " " + value.startTime.get(Calendar.HOUR_OF_DAY) + ":" + value.startTime.get(Calendar.MINUTE) + " - " + value.endTime.get(Calendar.HOUR_OF_DAY) 
                                    + ":" + value.endTime.get(Calendar.MINUTE) + " " + value.eventName );
                            year = key.get(Calendar.YEAR);
                            tempKey = key;
                        }

                    }else{
                        if(key.get(Calendar.YEAR) == year){
                            System.out.println(MyCalendarTester.arrayOfDays[key.get(Calendar.DAY_OF_WEEK) - 1] + ", " + MyCalendarTester.arrayOfMonths[key.get(Calendar.MONTH) - 1] + " "
                                    + key.get(Calendar.DATE) + " " + value.startTime.get(Calendar.HOUR_OF_DAY) + ":" + value.startTime.get(Calendar.MINUTE) + " " + value.eventName);
                            tempKey = key;

                        }else{
                            System.out.println(key.get(Calendar.YEAR));
                            System.out.println(MyCalendarTester.arrayOfDays[key.get(Calendar.DAY_OF_WEEK) - 1] + ", " + MyCalendarTester.arrayOfMonths[key.get(Calendar.MONTH) - 1] + " "
                                    + key.get(Calendar.DATE) + " " + value.startTime.get(Calendar.HOUR_OF_DAY) + ":" + value.startTime.get(Calendar.MINUTE)  + " " + value.eventName);
                            System.out.println();
                            year = key.get(Calendar.YEAR);
                            tempKey = key;
                        }
                    }
                    }


                }

        }

    }

我最初按键(日期)按升序排序。从那里,我正在寻找任何相同的日期,并按时间(值)排序。然后,由于我已经按时分类和打印了那些日子,我不想再转发它们。我已经调整了几个小时以试图让它合作,所以也许我现在在思考它。无论如何,如果有人能够看到这个并提出一些建议,我会非常感激。否则,只需跳过,因为这是一个漫长而复杂的问题。

1 个答案:

答案 0 :(得分:0)

Set中任何给定对象只会出现一次,这就是为什么只有一个被删除的原因。

设置不允许重复。如果要允许重复项,请使用其他数据结构,例如ArrayList。