问题是这样的:比方现在有一个集合List<User>,里面有N多条数据,User实体类如下:
我们有这样一个需求:要看看每个部门下面都有哪些员工?
可能有的小伙伴会觉得:这问题狗都知道怎么解决!拉到Dao层一个Group by,不就完事了?
但是,有的时候,这个list集合,并不一定是你从数据库获取的,是你前面一系列操作存储在service层的临时集合,那要怎么办呢?让头发还茂密的小young来教你!
第一步,我们需要用一个Set来存储部门id,Set的特性是自动去重,这个你总该知道吧!然后就有了下列操作:
@Test
public void test(){
//模拟集合中存储了一些数据
User Anna = new User("1001", "anna", "1", 20);
User Bill = new User("1002", "bill", "2", 21);
User Clark = new User("1003", "clark", "1", 19);
List<User> list = new ArrayList<>();
list.add(Anna);
list.add(Bill);
list.add(Clark);
//---------数据添加完毕
//创建一个存储部门id的Set
Set<String> set = new HashSet<>();
for (User user : list) {
set.add(user.getDeptId());
}
//根据deptId进行分组
Map<String, List<User>> listMap = list.stream().collect(Collectors.groupingBy(t -> t.getDeptId()));
for (String deptIdItem : set) {
System.out.println("-------------");
List<User> users = listMap.get(deptIdItem);
for (User user : users) {
System.out.println("部门编号为:" + user.getDeptId() + "的员工:" + user.getName() + "前来报到!");
}
}
}
运行结果如下:
这样,就实现了我们的需求!当然,实际开发中,可能在分组之后会有很多处理,我们这里仅仅带领大家实现分组,后续操作,还是需要结合需求去搞的~
感谢阅读,如果你觉得文章对你有帮助,就分享给更多的猿吧!
需要的依赖
import org.junit.Test;