java实现两张表的关联查询(非数据库语言)

已知我有两张表:

我现在查询时需要同时获取两张表对应的数据。比如我想要获取 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版权协议,转载请附上原文出处链接和本声明。