代码之家  ›  专栏  ›  技术社区  ›  twenty7

按阵列列表分组

  •  1
  • twenty7  · 技术社区  · 10 年前

    我得到了需要分组的对象数组列表。数组包含不同类型的对象。 下面是一个示例:

    List<Object[]> resultList = query.getResultList(); // call to DB
    
    // Let's say the object array contains objects of type Student and Book
    // and Student has a property Course.
    // Now I want to group this list by Student.getCourse()
    Map<String, Object[]> resultMap = resultList.stream().collect(Collectors.groupingBy(???));
    

    我应该向 Collectors.groupingBy() 方法 Student对象位于对象数组中的索引0处。

    1 回复  |  直到 9 年前
        1
  •  2
  •   Alexis C.    10 年前

    groupingBy 默认情况下会给您 Map<String, List<Object[]>> 在您的情况下,因为您将根据学生的课程值对数组进行分组。

    因此,需要根据数组中学生的课程值进行分组。因此,您将应用的函数为:

    o -> ((Student)o[0]).getCourse()
    

    因此通过实现的分组变为:

    Map<String, List<Object[]>> resultMap = 
        resultList.stream().collect(groupingBy(o -> ((Student)o[0]).getCourse()));
    

    顺便说一句,您可能希望使用类来获取类型化数据,并避免强制转换,这可能会在运行时引发异常。

    您还可以在数据库级别执行分组。