我很久以前就开始编程了,我需要你的帮助。我有一个Object1列表,一个Object1由Item1,Item2,Item3组成。
我想按Item2分组,然后用Object1的List映射每个Item2 我想用Item3的List列出每个Object1的List,然后我想计算Item3的每个List中不同的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;
}
}
Item1,Item2和Item3只包装一个String。
对于条目列表,我该如何摆脱它们?我不需要他们制作我的地图吗?
答案 0 :(得分:0)
以下是我的问题的答案:
Map<Item2, List<Object1>> object1GroupedByItem2 = object1List.stream().collect(Collectors.groupingBy(object1->object1.getItem2()));
Map<Item2, Long> nbItem3PerItem2 = object1GroupedByItem2.entrySet().stream().collect(Collectors.toMap(entry->entry.getKey(), entry->entry.getValue().stream().map(object1->object.getItem3()).distinct().count()));