我想对包含以下内容的对象列表进行分组time
属性分为 5 分钟间隔,最好使用流和收集器。
我在 StackOverflow 上找到的唯一可能的解决方案是计算我需要多少个间隔(子列表),将每个对象添加到每个列表中,并过滤掉不适合相应时间范围的对象,这并不是一个很好的解决方案。
(您可以在这里找到该主题:如何在 Java 8 中按另一个列表的元素对列表的元素进行分组 https://stackoverflow.com/questions/30245142/how-to-group-elements-of-a-list-by-elements-of-another-in-java-8)
我想到了类似的事情:
List<MyObject> list = new ArrayList<MyObject>();
.......
List<List<MyObject>> grouped = list.stream().collect(Collectors.groupingBy(obj -> obj.getTime() / intervalLength));
这当然行不通。
我希望,随着 Java 8 及其功能被越来越多地使用,我们可以找到解决此类问题的解决方案。
问候,
克拉斯·M.
编辑:
最后,我使用了@Harsh Poddar的解决方案,并将地图转换为列表列表,使用
for(Map.Entry<Integer, List<MyObject>> entry:map.entrySet())
list.add(entry.getValue());
注意:之后必须对列表进行排序。
这完全可以正常工作:
Map<Long,<List<MyObject>> grouped = ticks.stream().collect(Collectors.groupingBy(obj -> obj.getTime() / intervalLength));
此方法将为您提供一个地图,然后您可以在该地图上调用 .values() 来获取列表的列表。第一个元素将包含 obj.getTime() 从 0 到 IntervalLength 的元素(前提是存在此类元素)。第二个将包含从intervalLength到intervalLength*2等等
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)