Chcę zgrupować listę obiektów zawierającą atrybut time
w odstępach 5-minutowych, najlepiej przy użyciu strumieni i kolektorów.Jak grupować obiekty na liście na inne listy według atrybutów wykorzystujących strumienie i Java 8?
Jedynym możliwym rozwiązaniem, które znalazłem na StackOverflow, jest obliczenie, ile interwałów (podlistek) potrzebuję, dodanie każdego obiektu do każdej z tych list i odfiltrowanie tych, które nie pasują do odpowiednich ram czasowych, co nie jest dokładnie takie fajne rozwiązanie.
(Można znaleźć wątek tutaj: How to group elements of a List by elements of another in Java 8)
myślałem o czymś podobnym do tego:
List<MyObject> list = new ArrayList<MyObject>();
.......
List<List<MyObject>> grouped = list.stream().collect(Collectors.groupingBy(obj -> obj.getTime()/intervalLength));
To oczywiście doenst pracy.
Mam nadzieję, że dzięki zastosowaniu Java 8 &, jego funkcje będą coraz częściej używane, możemy znaleźć rozwiązanie dla tego problemu.
Pozdrawiam, Claas M.
EDIT: W końcu użyłem rozwiązanie @Harsh Poddar i konwertowane Mapa na listę list używając
for(Map.Entry<Integer, List<MyObject>> entry:map.entrySet())
list.add(entry.getValue());
Uwaga: Lista musiał być posortowane później.
To zadziałało, dziękuję! –