Java 如何分组然后映射流
我有一个对象列表,我想按2列对其进行分组,然后使用toMap收集所有值 假设我有一个具有5个属性的对象。类别A(A,b,c,d,e)和这些对象的列表称为列表。我想要实现的是按a,b分组,创建一个键为c的地图,以及包括它在内的所有对象Java 如何分组然后映射流,java,java-8,java-stream,Java,Java 8,Java Stream,我有一个对象列表,我想按2列对其进行分组,然后使用toMap收集所有值 假设我有一个具有5个属性的对象。类别A(A,b,c,d,e)和这些对象的列表称为列表。我想要实现的是按a,b分组,创建一个键为c的地图,以及包括它在内的所有对象 //Expected format of output map: Map<a, Map<b, Map<c, List<A>> myMap = new HashMap<>(); myMap = list.stream
//Expected format of output map:
Map<a, Map<b, Map<c, List<A>> myMap = new HashMap<>();
myMap = list.stream().
.collect(Collectors.groupingBy(A::a,
Collectors.groupingBy(A::b,
Collectors.toMap(A::c, Collectors.toList()))); //-> Here i'm expecting the map's key will be C and values should be all the onces which are grouped by a & b.
//输出映射的预期格式:
映射如果我理解您的问题,您希望将所有值按a
和b
分组,然后以c
作为键填充此列表作为映射
您可以通过以下方式实现此目的:
myMap
将如下所示:
{
"aa": {
"b": {
"ccc": [
{"a": "aa", "b": "b", "c": "ccc", "d": "d", "e": "e" },
{"a": "aa", "b": "b", "c": "c", "d" : "dd", "e" : "ee"}
],
"c": [
{"a": "aa", "b": "b", "c": "ccc", "d": "d", "e": "e" },
{"a": "aa", "b": "b", "c": "c", "d" : "dd", "e" : "ee"}
]
}
},
"aaa": {
"bb": {
"cc": [
{"a": "aaa", "b": "bb", "c": "cc", "d": "ddd", "e": "ee" },
{"a": "aaa", "b": "bb", "c": "c", "d": "dd", "e": "eee"}
],
"c": [
{"a": "aaa", "b": "bb", "c": "cc", "d": "ddd", "e": "ee" },
{"a": "aaa", "b": "bb", "c": "c", "d": "dd", "e": "eee"}
]
},
"bbb": {
"ccc": [
{"a": "aaa", "b": "bbb", "c": "ccc", "d": "ddd", "e": "eee"}
]
}
}
}
如果我理解您的问题,您希望将所有值按a
和b
分组,然后以c
作为键填充此列表作为映射
您可以通过以下方式实现此目的:
myMap
将如下所示:
{
"aa": {
"b": {
"ccc": [
{"a": "aa", "b": "b", "c": "ccc", "d": "d", "e": "e" },
{"a": "aa", "b": "b", "c": "c", "d" : "dd", "e" : "ee"}
],
"c": [
{"a": "aa", "b": "b", "c": "ccc", "d": "d", "e": "e" },
{"a": "aa", "b": "b", "c": "c", "d" : "dd", "e" : "ee"}
]
}
},
"aaa": {
"bb": {
"cc": [
{"a": "aaa", "b": "bb", "c": "cc", "d": "ddd", "e": "ee" },
{"a": "aaa", "b": "bb", "c": "c", "d": "dd", "e": "eee"}
],
"c": [
{"a": "aaa", "b": "bb", "c": "cc", "d": "ddd", "e": "ee" },
{"a": "aaa", "b": "bb", "c": "c", "d": "dd", "e": "eee"}
]
},
"bbb": {
"ccc": [
{"a": "aaa", "b": "bbb", "c": "ccc", "d": "ddd", "e": "eee"}
]
}
}
}
按(a,b)
分组而将c
作为地图的键是没有意义的。。。您可以添加示例数据吗?是的,它可能不会添加值,但我有一个用例,我最终以这种方式形成地图,以便将其发送到其他预期的服务。您可以显示一个示例,其中包含输入数据到输出数据吗@SantoshKsl@SantoshKsl你试过.collect(groupingBy)吗(A::getC))
?输入数据是平面对象。假设在对象中A=product,b=date,c=name。我有一个单独的配置,比如说,name1可以等价于{name 3,name 4}类似的name 5->{name 6,name 7}.因此,根据我们的示例,我已按产品和日期进行分组。现在,我试图为给定名称(即c)获取它,并映射其所有等效名称。因此,按c分组并希望收集所有名称。按(a,b)分组没有意义
但仍将c
作为地图的键…您可以添加示例数据吗?是的,它可能不会添加值,但我有一个用例,我最终以这种方式形成地图,以便将其发送给其他预期服务。您能举一个示例,用输入数据输出数据吗@SantoshKsl@SantoshKsl你试过.coll吗ect(groupingBy(A::getA,groupingBy(A::getB,groupingBy(A::getC)))
?输入数据是平面对象。假设对象A=product,b=date,c=name。我有一个单独的配置,比如说,name1可以等价于{Name3,Name4}类似的名称5->{Name6,name7}根据我们的例子,我已经按产品和日期进行了分组。现在,我试图为一个给定的名称(即c)得到它,映射它的所有等价名称。所以,按c分组,并希望收集所有名称。
{
"aa": {
"b": {
"ccc": [
{"a": "aa", "b": "b", "c": "ccc", "d": "d", "e": "e" },
{"a": "aa", "b": "b", "c": "c", "d" : "dd", "e" : "ee"}
],
"c": [
{"a": "aa", "b": "b", "c": "ccc", "d": "d", "e": "e" },
{"a": "aa", "b": "b", "c": "c", "d" : "dd", "e" : "ee"}
]
}
},
"aaa": {
"bb": {
"cc": [
{"a": "aaa", "b": "bb", "c": "cc", "d": "ddd", "e": "ee" },
{"a": "aaa", "b": "bb", "c": "c", "d": "dd", "e": "eee"}
],
"c": [
{"a": "aaa", "b": "bb", "c": "cc", "d": "ddd", "e": "ee" },
{"a": "aaa", "b": "bb", "c": "c", "d": "dd", "e": "eee"}
]
},
"bbb": {
"ccc": [
{"a": "aaa", "b": "bbb", "c": "ccc", "d": "ddd", "e": "eee"}
]
}
}
}