Как да разделите масива на различен масив или същия масив с различни ключове, като проверите стойността на масива

Имам масив, който съдържа календари като този. този масив може да съдържа данни от всички месеци.

calendarday: [CalendarDay{2017-8-13}, CalendarDay{2017-8-14}, CalendarDay{2017-9-18}, CalendarDay{2017-9-19}, CalendarDay{2017-10-15}, CalendarDay{2017-10-16}]

това, което искам, е да разделя тези стойности на масива по месеци в различни масиви или същите масиви с различни ключове. като този

calendarday: [CalendarDay{2017-8-13}, CalendarDay{2017-8-14}]

calendardayone: [CalendarDay{2017-9-18}, CalendarDay{2017-9-19}]

или като това

calendarday: [
0:[CalendarDay{2017-8-13}, CalendarDay{2017-8-14}],
1:[CalendarDay{2017-9-18}, CalendarDay{2017-9-19}], 
2:[CalendarDay{2017-10-15}, CalendarDay{2017-10-16}]
]

Един от начините, които намерих, е да проверя дали условието е за целия месец и да разделя този масив. но не искам да го правя. има ли някакви алтернативни методи, така че да не се налага да проверявам състоянието за всички месеци

Всяка помощ и идеи ще бъдат оценени. Благодаря предварително.


person Anil Shrestha    schedule 14.09.2017    source източник
comment
вижте този пример stackoverflow.com/a/36678648/3883957, който използва Collectors.groupingBy   -  person yishaiz    schedule 14.09.2017
comment
Разгледах примера, но той казва, че lamda изразът не се поддържа на това ниво   -  person Anil Shrestha    schedule 14.09.2017
comment
може би този отговор stackoverflow.com/a/35524722/3883957, който използва Apache Commons Collections, ще помогне?   -  person yishaiz    schedule 14.09.2017
comment
Какво точно е CalendarDay{2017-8-13} като тип данни? Низ ли е, персонализиран клас или какво? Защото имам идея, но ми трябват още подробности, за да видя дали работи.   -  person Iulian Popescu    schedule 14.09.2017
comment
той е във формат на календарен ден, но може да бъде и низ, ако имате идея с низ, отколкото е низ   -  person Anil Shrestha    schedule 14.09.2017


Отговори (2)


Това е решението, за което мислех: запазете всички CalendarDay в речник, като ключът е месецът. Така че започваме с нещо подобно:

String[] array = {"CalendarDay{2017-8-13}", "CalendarDay{2017-8-14}", "CalendarDay{2017-9-18}", "CalendarDay{2017-9-19}", "CalendarDay{2017-10-15}", "CalendarDay{2017-10-16}"};

След това просто итерирайте масива, разделете всеки низ и го запазете в речника:

Map<String, ArrayList<String>> dictionary = new HashMap<String, ArrayList<String>>();
for (String currentString : array) {
    String month = currentString.split("-")[1];
    ArrayList<String> values = dictionary.get(month);
    if (values == null) {
        values = new ArrayList<String>();
    }
    values.add(currentString);
    dictionary.put(month, values);
}

И завършваме с нещо подобно:

{
    8=[CalendarDay{2017-8-13}, CalendarDay{2017-8-14}], 
    9=[CalendarDay{2017-9-18}, CalendarDay{2017-9-19}], 
    10=[CalendarDay{2017-10-15}, CalendarDay{2017-10-16}]
}
person Iulian Popescu    schedule 14.09.2017
comment
ето как трябва да изглежда речникът. пробвах, но дава празно. - person Anil Shrestha; 14.09.2017
comment
да, преобразувах списъка с масиви от календарни дни в списък с масиви от низове и изпълних вашия код - person Anil Shrestha; 14.09.2017
comment
И какъв точно е проблема? Отпечатва празен речник или изобщо не отпечатва нищо? - person Iulian Popescu; 14.09.2017

Можете да получите стойността на месеца във всеки елемент и след това да го поставите в различен масив в зависимост от стойността

person U2647    schedule 14.09.2017
comment
знам това решение, но това, което искам е, ако има различен начин, така че да не се налага да проверявам за всички месеци - person Anil Shrestha; 14.09.2017