我有两个问题,我似乎无法解决。第一个是我需要一种方式来进行动态嵌套分组,其中可以有1-n个嵌套组,用户可以通过。Java 8嵌套分组
第二个问题是我需要将结果展平concat而不是嵌套。
我的示例输入看起来像这样:
List<Map<String, String>> fakeData = new LinkedList<>();
Map<String, String> data1 = new HashMap<>();
data1.put("ip","10.0.1.0");
data1.put("uid","root");
data1.put("group","admin");
fakeData.add(data1);
Map<String, String> data2 = new HashMap<>();
data2.put("ip","10.0.1.1");
data2.put("uid","tiger");
data2.put("group","user");
fakeData.add(data2);
Map<String, String> data3 = new HashMap<>();
data3.put("ip","10.0.1.1");
data3.put("uid","woods");
data3.put("group","user");
fakeData.add(data3);
最终结果有地图键的的concat:
{
"10.0.1.1user": [
{
"uid": "tiger",
"ip": "10.0.1.1",
"group": "user"
},
{
"uid": "woods",
"ip": "10.0.1.1",
"group": "user"
}
],
"10.0.1.0admin": [
"uid": "root",
"ip": "10.0.1.0",
"group": "admin"
]
}
通知的键的concat而不是映射内嵌套的地图。
我试图创建一个groupingby在那里可以没有任何的运气是动态的:
fakeData.stream()
.collect(groupingBy(map -> map.get("ip"),
groupingBy(map -> map.get("uuid"),
... nested "n" times)));
这是我想要实现的接口:
public Map<String, List<Map<String, String>>> doGrouping(List<String> columns,
List<Map<String, String>> data);
我不确定我是否完全理解您尝试实施的方法的输入/输出。看起来输出类型不包含任何“n”个嵌套分组。您能否请您说明您打算如何使用您的示例数据调用'doGrouping',以及期望的输出是什么? – 4castle
你是说如果'doGrouping'的'columns'参数包含'N'个元素,那么你需要通过每个'N'元素创建嵌套的组?而且你希望每个组的键都被连接而不是嵌套? –
我在输出或接口中看不到任何会提示n级嵌套的东西。它看起来像你只是在顶层分组的多个键。 – shmosel