groupingby数组列表

时间:2015-07-21 09:02:13

标签: java java-stream collectors

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

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 个答案:

答案 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()));

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

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