1
我已經開始編程不久,我需要你的幫助。我有一個Object1的列表,一個Object1由Item1,Item2,Item3組成。使用Java映射值列表與另一個值列表8
我想通過Item2進行分組,將每個Item2與Object1的列表進行映射,然後使用 我想將Object1的每個List與Item3的List進行映射,最後我想要計算不同的Item3的數量在Item3的每個列表中。
說了一下,我想在Object1列表中計算每個Item2中Item3的數量。
要做到這一點,這裏是我迄今所做的:
Map<Item2, List<Object1>> object1GroupedByItem2 = object1List.stream().collect(Collectors.groupingBy(object1->object1.getItem2()));
List<Entry<Item2, List<Object1>>> object1GroupedByItem2List = object1GroupedByItem2.entrySet().stream().collect(Collectors.toList());
Map<Item2, List<Item3>> item3GroupedByItem2 = object1GroupedByItem2List.stream().collect(Collectors.toMap(entry->entry.getKey(),entry->entry.getValue().stream().map(object1->object1.getItem3()).collect(Collectors.toList())));
List<Entry<Item2, List<Item3>>> item3GroupedByItem2List = item3GroupedByItem2.entrySet().stream().collect(Collectors.toList());
Map<Item2, List<Item3>> distinctItem3GroupedByItem2 = item3GroupedByItem2List.stream().collect(Collectors.toMap(entry->entry.getKey(),entry->entry.getValue().stream().distinct().collect(Collectors.toList())));
List<Entry<Item2, List<Item3>>> distinctItem3GroupedByItem2List = distinctItem3GroupedByItem2.entrySet().stream().collect(Collectors.toList());
Map<Item2, Long> nbItem3PerItem2 = distinctItem3GroupedByItem2List.stream().collect(Collectors.toMap(entry->entry.getKey(),entry->entry.getValue().stream().count());
我幾乎可以肯定,必須有一個更好的方式做同樣的,但我不知道如何.. 你能幫我嗎?
在此先感謝
編輯:
public class Object1 {
private Item1 item1;
private Item2 item2;
private Item3 item3;
public Object1(Item1 item1, Item2 item2, Item3 item3) {
this.item1 = item1;
this.item2 = item2;
this.item3 = item3;
}
public Item1 getItem1() {
return item1;
}
public void setItem1(Item1 item1) {
this.item1 = item1;
}
public Item2 getItem2() {
return item2;
}
public void setItem2(Item2 item2) {
this.item2 = item2;
}
public Item3 getItem3() {
return item3;
}
public void setItem3(Item3 item3) {
this.item3 = item3;
}
}
項目1,項目2和項目3只包裝的字符串。
至於條目列表,我該如何擺脫它們?我不需要他們來製作我的地圖嗎?
你應該向我們展示類Object1,項目1,項目2和項目3的定義,使我們清楚地瞭解他們是如何相關在一起。你應該格式化你的代碼,使它可讀。 – Heri
我會開始擺脫條目列表。那些根本就沒有必要。 –
這看起來像一個設計噩夢,你通常不會使'x1','x2','x3',你創建對象的多個實例並將它們存儲在一個數組/集合中。命名也很重要,你選擇的名字是非常模棱兩可和混淆的(即使我自己試圖跟蹤我的頭) – Rogue