list - 如何使用流和 Java 8 按属性将列表中的对象分组到其他列表中?

标签 list lambda java-8 java-stream

我想将包含 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/

相关文章:

python - 从map()返回不同的变量

java - 从java中的枚举列表中删除一个元素

python - 如何查找列表中嵌套列表的数量?

python - 当越界索引在 np 数组中时,为什么 python numpy.delete 不会引发 indexError

list - LISP - 如何从嵌套列表中获取平均长度?一步一步的解释

c# - 带输出参数的 Lambda 泛型表达式

PHP/MySQL 文本字段按条件搜索

java - JAVA-8 中堆上的字符串对象数

java - 如何将 Map 中的值与流相加?

list - 如何在 dbt jinja 中将两个表连接到字典中