Cla*_* M. 5 lambda list java-8 java-stream
我想将包含time属性的对象列表分组为5分钟,最好使用流和收集器.
我在StackOverflow上找到的唯一可能的解决方案是计算我需要多少个间隔(子列表),将每个对象添加到这些列表中的每一个,并过滤掉那些不适合相应时间范围的对象,这不是一个很好的解决方案.
(您可以在此处找到Thread:如何在Java 8中按另一个元素的元素对List的元素进行分组)
我想到了类似的东西:
List<MyObject> list = new ArrayList<MyObject>();
.......
List<List<MyObject>> grouped = list.stream().collect(Collectors.groupingBy(obj -> obj.getTime() / intervalLength));
Run Code Online (Sandbox Code Playgroud)
这当然是最重要的工作.
我希望随着Java 8及其功能的使用越来越多,我们可以为这样的问题找到一个suting解决方案.
此致,Claas M.
编辑:最后,我使用了@Harsh Poddar的解决方案并将Map转换为列表列表使用
for(Map.Entry<Integer, List<MyObject>> entry:map.entrySet())
list.add(entry.getValue());
Run Code Online (Sandbox Code Playgroud)
注意:之后必须对List进行排序.
这完全可以正常工作:
Map<Long,<List<MyObject>> grouped = ticks.stream().collect(Collectors.groupingBy(obj -> obj.getTime() / intervalLength));
Run Code Online (Sandbox Code Playgroud)
此方法将为您提供一个地图,然后您可以在该地图上调用 .values() 来获取列表的列表。第一个元素将包含 obj.getTime() 从 0 到 IntervalLength 的元素(前提是存在此类元素)。第二个将包含从intervalLength到intervalLength*2等等
| 归档时间: |
|
| 查看次数: |
4814 次 |
| 最近记录: |