我得到了一个需要分组的对象数组列表。数组包含不同类型的对象。 这是一个例子:
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处。
答案 0 :(得分:1)
groupingBy
会为您提供Map<String, List<Object[]>>
,因为您会根据学生的课程价值对数组进行分组。
因此,您需要按照数组中学生的课程值进行分组。因此,您将应用的功能是:
o -> ((Student)o[0]).getCourse()
因此实施分组变为:
Map<String, List<Object[]>> resultMap =
resultList.stream().collect(groupingBy(o -> ((Student)o[0]).getCourse()));
顺便说一句,您可能希望使用类来获取类型化数据并避免强制转换,这可能会在运行时抛出异常。
您还可以在数据库级别执行分组。