Java集合多重分组---lambda表达式实现
程序员文章站
2022-05-22 21:24:42
...
一、问题
一个查询结果怎么实现嵌套结果集,每个省份展开有多个城市每个城市展开有多个区域?
二、代码示例
package lambda;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.mapping;
import static java.util.stream.Collectors.toList;
/**
* @Description Java集合多重分组---lambda表达式实现
* @Author King
* @Date 2019/11/21 13:41
* @Version 1.0
**/
@RestController
@RequestMapping("group")
public class GroupController {
/**
* 国家对象
*/
@Data
@AllArgsConstructor
static class Country {
/**
* 省份ID
*/
Integer pid;
/**
* 省份名称
*/
String pname;
/**
* 城市ID
*/
Integer cid;
/**
* 城市名称
*/
String cname;
/**
* 地区ID
*/
Integer did;
/**
* 地区名称
*/
String dname;
}
/**
* 创建测试数据(实际数据是从数据库查询)
*/
private static List<Country> list = new ArrayList<>(10);
static {
list.add(new Country(1, "北京", 2, "北京市", 11, "通州区"));
list.add(new Country(1, "北京", 2, "北京市", 17, "密云区"));
list.add(new Country(1, "北京", 2, "北京市", 4, "西城区"));
list.add(new Country(1, "北京", 2, "北京市", 10, "东城区"));
list.add(new Country(1, "北京", 2, "北京市", 16, "房山区"));
list.add(new Country(2, "天津", 7, "天津市", 3, "宝坻区"));
list.add(new Country(2, "天津", 7, "天津市", 9, "河北区"));
list.add(new Country(2, "天津", 7, "天津市", 15, "南开区"));
list.add(new Country(5, "山东", 9, "青岛市", 11, "市北区"));
list.add(new Country(5, "山东", 9, "青岛市", 11, "市南区"));
list.add(new Country(5, "山东", 11, "潍坊市", 11, "奎文区"));
list.add(new Country(5, "山东", 15, "烟台市", 11, "福山区"));
}
@GetMapping("list")
public Map list() {
// 返回前端结果集
Map<String, Map<String, List<String>>> map = new HashMap<>(16);
// lambda进行多重分组
list.stream().collect(groupingBy(Country::getPname)).forEach((n, l) -> {
Map<String, List<String>> collect = l.stream()
.collect(groupingBy(Country::getCname, mapping(Country::getDname, toList())));
map.put(n, collect);
});
return map;
}
}
三、测试
在浏览器中输入URL:http://localhost:8080/group/list
结果如下:
推荐阅读
-
java使用lambda表达式对List集合进行操作技巧(JDK1.8)
-
Java的lambda表达式实现解析
-
Java中lambda表达式实现aop切面功能
-
Java中lambda表达式实现aop切面功能
-
JAVA 8 lambda 表达式实现按某个属性值查找集合中符合条件的所有对象并求和
-
Java8 Lambda表达式模板方法实现解析
-
Java 进阶使用 Lambda 表达式实现超强的排序功能
-
Java 使用List sort()方法对复杂对象集合排序(基于Lambda表达式)
-
Java集合多重分组---lambda表达式实现
-
java8lambda表达式对集合分组并且排序(记一次性能优化案例)