已知我有两张表:
我现在查询时需要同时获取两张表对应的数据。比如我想要获取 stuid,honName,obreson三个对应字段。我在脑子里梳理了一下思路,以我目前的知识储备,只能在数据库写一下两个表join,然后在bean层,要么一个里面封装另外一个对象,要么另外写一个类封装一下。
很明显第一个方法有点违反开闭原则,假如这个底层不是我写的那我绝对不能这么干,第二个又有点繁琐,所以我就在思考有没有别的方法。
解决方法:
我想起来了在stream那一块的流的扁平化这一点,立马去实践了一下:
List<Honor> honorList = honors.findAll();
List<Obtainedhonor> obtainedhonorList = obHonors.findAll();
List<Object[]> list = obtainedhonorList
.stream()
.flatMap(o->honorList
.stream()
.filter(h->o.getHonid()==h.getHonid())
.map(h->new Object[]{h,o}))
.collect(Collectors.toList());
现在就已经拿到了这样的一组集合
//list<Object[]{Honor,ObtainedHonor}>
尝试对两个进行一下遍历
for (Object[] o:list
) {
for (int i=0;i<o.length;i++){
if (i==1){
Obtainedhonor obtainedhonor = (Obtainedhonor)o[1];
System.out.println(obtainedhonor.getStuid());
System.out.println(obtainedhonor.getObreson());
}else {
Honor h =(Honor)o[0];
System.out.println(h.getHonname()+"-----");
}
}
}
获得的结果为:
奖励1-----
1
表现优秀
奖励2-----
1
表现卓越
再来个例子
假如对一张表进行处理之后需要用另一张表存储其中的某些字段,则:
版权声明:本文为qq_38895905原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。