Desidero raggruppare un elenco di oggetti contenente un attributo time
in intervalli di 5 minuti, preferibilmente utilizzando flussi e collettori.Come raggruppare gli oggetti in un elenco in altri elenchi per Attributo utilizzando gli stream e Java 8?
L'unica soluzione possibile trovata su StackOverflow è calcolare quanti intervalli (sottoliste) ho bisogno, aggiungere ogni oggetto a ciascuna di queste liste e filtrare quelli che non rientrano nel rispettivo intervallo temporale, che non è esattamente una bella soluzione.
(potete trovare il thread qui: How to group elements of a List by elements of another in Java 8)
ho pensato a qualcosa di simile a questo:
List<MyObject> list = new ArrayList<MyObject>();
.......
List<List<MyObject>> grouped = list.stream().collect(Collectors.groupingBy(obj -> obj.getTime()/intervalLength));
Questo, naturalmente, lavoro doenst.
Spero che, con Java 8 & le sue funzionalità vengano utilizzate sempre di più, possiamo trovare una soluzione di sinterizzazione per tale problema.
saluti, Claas M.
EDIT: Alla fine, ho usato la soluzione di @Harsh Poddar e convertito la mappa in una lista di liste utilizzando
for(Map.Entry<Integer, List<MyObject>> entry:map.entrySet())
list.add(entry.getValue());
Nota: L'elenco ha dovuto essere ordinati in seguito.
Che funzionava, grazie! –