1

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

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 处。

4

1 回答 1

2

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

因此,您需要按数组中学生的课程值进行分组。因此,您将应用的功能将是:

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

因此按实现分组变为:

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

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

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

于 2015-07-21T09:10:35.373 回答