我有一個Java類:Java集合 - 通過多組屬性
class Person {
String firstName;
String lastName;
int income;
public Person(String firstName, String lastName, int income)
{
this.firstName = firstName;
this.lastName = lastName;
this.income = income;
}
我有一個Collection<Person>
,與4×Person對象:
Collection<Person> persons = new ArrayList<>();
persons.add(new Person("John", "Smith", 5));
persons.add(new Person("Mary", "Miller", 2));
persons.add(new Person("John", "Smith", 4));
persons.add(new Person("John", "Wilson", 4));
我想打一個新的集合實例,但是來自具有相同「firstName」和「lastName」的元素使1元素,並且結果「收入」將是每個元素的「收入」的總和。因此,對於這種特殊情況下,所產生的集合將有3個元素,而「約翰·史密斯」將有「收入」 = 9
在SQL,等效查詢:
SELECT FIRSTNAME, LASTNAME, SUM(INCOME) FROM PERSON GROUP BY FIRSTNAME, LASTNAME
我發現僅包含Map作爲結果的答案,「key」包含用於分組的列。我想從最初的(ArrayList<Person>
)直接獲取類似的集合類型,而不是Map,因爲如果在我的集合中有數百萬個元素,則會降低代碼的性能。如果我在SQL方面工作,我知道這很容易,但在這種情況下,我必須在Java方面工作。
請注意,大多數Java解決方案不會使用SQL使用的任何重度優化。所以你的分組等價物總是不那麼高效,使用它們之間的映射,然後將所有內容轉換爲你想要的輸出格式。另一種方法是使用一個在Java中提供SQL語法的庫,這些庫也可能使用一些重要的優化。 – Zabuza