我有两个问题无法解决。第一个问题是我需要一种方法来实现动态嵌套分组,其中用户可以传递1-n个嵌套组。
第二个问题是我需要展平结果,其中键是连接而不是嵌套的。
我的示例输入如下:
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);
最终结果将会是一个映射键的连接:
{
"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"
]
}
请注意,键是连接而不是嵌套的映射。
我试图创建一个可以动态分组的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);
doGrouping
,以及期望的输出是什么吗? - 4castledoGrouping
的columns
参数包含N
个元素,那么你需要通过每个N
元素创建嵌套分组?并且你希望每个分组的键被连接而不是嵌套? - fpsgroupingBy(map -> map.get("ip") + map.get("uuid"))
不好吗?对于键列表,也许可以使用listOfKeys.stream().map(map::get).collect(Collectors.joining())
。 - Ole V.V.