我想将包含 time
属性的对象列表分组为 5 分钟间隔,最好使用流和收集器。
我在 StackOverflow 上找到的唯一可能的解决方案是计算我需要多少个间隔(子列表),将每个对象添加到每个列表中,并过滤掉不适合各自时间范围的对象,这并不完全是一个很好的解决方案。
(您可以在这里找到该主题: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的解决方案,并使用将 map 转换为列表列表
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));
此方法将为您提供一个 map ,然后您可以在该 map 上调用 .values() 来获取列表列表。第一个元素将包含 obj.getTime() 从 0 到 IntervalLength 的元素(前提是存在此类元素)。第二个将包含从intervalLength到intervalLength*2等等
关于list - 如何使用流和 Java 8 按属性将列表中的对象分组到其他列表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30415783/