是否可以對Stream
中的元素進行分組,然後繼續流式傳輸而不必從返回的地圖的EntrySet
創建新的流?是否可以在不關閉流的情況下對元素進行分組?
例如,我可以這樣做:
public static void main(String[] args) {
// map of access date to list of users
// Person is a POJO with first name, last name, etc.
Map<Date, List<Person>> dateMap = new HashMap<>();
// ...
// output, sorted by access date, then person last name
dateMap.entrySet().stream().sorted(Map.Entry.comparingByKey()).forEach(e -> {
Date date = e.getKey();
// group persons by last name and sort
// this part seems clunky
e.getValue().stream().collect(Collectors.groupingBy(Person::getLastName, Collectors.toSet()))
.entrySet().stream().sorted(Map.Entry.comparingByKey()).forEach(e2 -> {
// pool agent id is the key
String lastName = e2.getKey();
Set<Person> personSet = e2.getValue();
float avgAge = calculateAverageAge(personSet);
int numPersons = personSet.size();
// write out row with date, lastName, avgAge, numPersons
});
});
}
這工作得很好,但似乎有點麻煩,尤其是流進一個地圖,然後立即進入集映射的流。
有沒有辦法將流中的對象分組,但繼續流式傳輸?
簡單的答案是*不*;但可能你可以準確解釋你想要達到的目標(輸入和輸出),我們可以幫助解決這個問題? – Eugene
@Eugene謝謝。這個問題恰恰包含了我想達到的目標,或多或少。我有dateMap的工作,我需要輸出行到按日期,然後姓氏,按日期或姓氏排序的報告。 – lucasvw
在你的問題中沒有任何明顯的。我可以推論的是,你想按日期訂購人員,然後按姓氏。這種排序是否足夠,還是你真的需要將它們分組? – VGR