"mid": 0,
"rolename": "超级管理员",
"menuname": "one"
},
{
"mid": 0,
"rolename": "超级管理员",
"menuname": "two"
},
{
"mid": 0,
"rolename": "超级管理员",
"menuname": "three"
},
{
"mid": 0,
"rolename": "管理员",
"menuname": "one"
},
{
"mid": 0,
"rolename": "管理员",
"menuname": "two"
},
{
"mid": 0,
"rolename": "普通用户",
"menuname": "one"
}
],
拼接后
"mid": 0,
"rolename": "超级管理员",
"menuname": "one,two,three"
},
{
"mid": 0,
"rolename": "管理员",
"menuname": "one,two"
},
{
{
"mid": 0,
"rolename": "普通用户",
"menuname": "one"
}
],
返回给前端再在前端拼接
const arr = [
{ mid: 0, rolename: "超级管理员", menuname: "one" },
{
mid: 0,
rolename: "超级管理员",
menuname: "two",
},
{
mid: 0,
rolename: "超级管理员",
menuname: "three",
},
{
mid: 0,
rolename: "管理员",
menuname: "one",
},
{
mid: 0,
rolename: "管理员",
menuname: "two",
},
{
mid: 0,
rolename: "普通用户",
menuname: "one",
},
];
const newArr = [];
arr.forEach((cur) => {
const index = newArr.findIndex((newA) => newA.rolename === cur.rolename);
index === -1
? newArr.push(cur)
: (newArr[index].menuname = newArr[index].menuname.concat(
"," + cur.menuname
));
});
console.log(newArr);
思路:使用 Java 8 Stream 将列表转换为 Map,其中 Map 的 key 为 mid+rolename,value 为列表项,如果遇到相同的key,取新的项,并将新项中的 menuname 设置为旧项中的 menuname + 新项中的 menuname,Map 中的值就是想要的结果。
代码实现:
public class App {
@lombok.Data
private static class Data {
private Integer mid;
private String roleName;
private String menuname;
}
public static void main(String[] args) {
// 输入:[{"mid":0,"rolename":"管理员","menuname":"one"},{"mid":0,"rolename":"管理员","menuname":"two"}]
String arr = "[{\"mid\":0,\"rolename\":\"管理员\",\"menuname\":\"one\"},{\"mid\":0,\"rolename\":\"管理员\",\"menuname\":\"two\"}]";
Collection<Data> newList = JSONArray.parseArray(arr, Data.class).stream()
.collect(Collectors.toMap(item -> item.getMid() + item.getRoleName(), item -> item, (oldData, newData) -> {
newData.setMenuname(oldData.getMenuname() + "," + newData.getMenuname());
return newData;
})).values();
// 输出:[{"menuname":"one,two","mid":0,"roleName":"管理员"}]
System.out.println(JSONArray.toJSONString(newList));
}
}
可以使用fastjson,有对应的对象及数组等,直接返回即可。
这是一个标准的List<T>格式。