2015-07-21 232 views
0

我得到了需要分組的對象數組列表。數組包含不同類型的對象。 下面是一個例子:按分組列表排列

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

groupingBy默認情況下會給你一個Map<String, List<Object[]>>你的情況,因爲你會根據他們學生的課程價值對數組進行分組。

所以你需要按數組中的學生的課程價值進行分組。您將應用功能,因此是:

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

從而通過實施分組成爲:

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

順便說一句,你可能需要使用一類具有類型的數據,避免投,那可能會在運行時拋出異常。您可以在數據庫級執行分組。