【发布时间】:2016-10-30 18:57:17
【问题描述】:
我不久前开始编程,我需要你的帮助。我有一个 Object1 的列表,一个 Object1 由 Item1、Item2、Item3 组成。
我想按 Item2 分组,将每个 Item2 映射到 Object1 的列表,然后 我想将每个 Object1 列表与 Item3 列表映射,然后最后我想计算每个 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;
}
}
Item1、Item2 和 Item3 只是包装一个字符串。
至于条目列表,我该如何摆脱它们?我不需要他们来制作我的地图吗?
【问题讨论】:
-
您应该向我们展示 Object1、Item1、Item2 和 Item3 类的定义,以便我们清楚地了解它们之间的关系。并且你应该格式化你的代码以便它是可读的。
-
我会首先摆脱条目列表。这些根本没有必要。
-
这似乎是一场设计噩梦,您通常不会创建
x1、x2、x3,而是创建对象的多个实例并将它们存储在数组/集合中。命名也很重要,您选择的名称非常模棱两可且令人困惑(即使我自己尝试在脑海中追踪)
标签: java dictionary java-stream