白沐沐vccc 2023-08-27 17:17 采纳率: 96.2%
浏览 5
已结题

java查询sql同类合并问题

我现在有2个表,表A,表B
A(
ida int primary key
)

B(
idb int primary key
ida int
)

我现在查询表A,B,并且将表A,B根据A.ida=B.ida进行连接,
最后想要得到数据格式为
Integer ida,
List idb

但是上面查询出的结果格式为
Integer ida,
Integer idb

这就需要我写个类
T(
Integer ida,
Integer idb
)
来接受这个数据

然后在写个类
R(
Integer ida,
List idb
)
将同类项合并到一起,然后存到类B中,整体感觉号繁琐,请问有没有简单的方法,不用多写类T。
上面用的是java

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-08-27 17:19
    关注

    引用 皆我百晓生 小程序回复内容作答:

    在表连接查询的结果中,如果想要将同类项合并到一起并存储到类B中,可以使用Java中的Map数据结构来实现,而不需要额外定义类T。

    可以按照以下步骤进行处理:

    1. 定义一个Map,用于存储ida和对应的idb列表。键为ida,值为idb的列表。

    2. 进行表连接查询,并将结果按照ida进行分组。遍历查询结果,将ida作为键,将对应的idb添加到值列表中。

    3. 创建一个类R,包含ida和List idb属性,用于存储合并后的结果。

    4. 遍历Map中的键值对,将每个键值对的键和值作为R对象的属性,并将R对象添加到类B的列表中。

    下面是一个示例代码:

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    public class MergeExample {
        public static void main(String[] args) {
            // 假设表A和表B的查询结果分别为List<Integer> aList和List<Integer> bList
            List<Integer> aList = new ArrayList<>();
            List<Integer> bList = new ArrayList<>();
    
            // 假设aList和bList中的数据已经赋值
    
            // 使用Map存储ida和对应的idb列表
            Map<Integer,List<Integer>> map = new HashMap<>();
    
            // 进行表连接查询,并将结果按照ida进行分组
            for (int i = 0; i < aList.size(); i++) {
                int ida = aList.get(i);
                int idb = bList.get(i);
    
                // 如果map中已经存在ida,则将idb添加到对应的列表中;否则,创建一个新的列表,并将idb添加到列表中
                if (map.containsKey(ida)) {
                    map.get(ida).add(idb);
                } else {
                    List<Integer> idbList = new ArrayList<>();
                    idbList.add(idb);
                    map.put(ida, idbList);
                }
            }
    
            // 创建类B的列表,用于存储合并后的结果
            List<R> resultList = new ArrayList<>();
    
            // 遍历Map中的键值对,将每个键值对的键和值作为R对象的属性,并将R对象添加到类B的列表中
            for (Map.Entry<Integer, List<Integer>> entry : map.entrySet()) {
                int ida = entry.getKey();
                List<Integer> idbList = entry.getValue();
    
                R objR = new R(ida, idbList);
                resultList.add(objR);
            }
    
            // 最终的结果为resultList,其中包含了合并后的数据
        }
    }
    
    // 定义类R,用于存储ida和List idb
    class R {
        private Integer ida;
        private List<Integer> idb;
    
        public R(Integer ida, List<Integer> idb) {
            this.ida = ida;
            this.idb = idb;
        }
    
        // 添加getter和setter方法
    }
    

    通过使用Map来进行分组和合并,可以避免定义额外的类T,简化了代码逻辑。在遍历表连接查询结果时,将ida作为键,idb列表作为值,存储在Map中。最后,遍历Map中的键值对,将每个键值对的键和值作为R对象的属性,构造R对象并将其添加到类B的列表中。

    通过这种方式,可以将同类项合并到一起,并且不需要额外定义类T。最终的结果存储在类B的列表resultList中。

    希望这个解决方案能够帮助到您。如果您还有其他问题,请随时提问。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月11日
  • 已采纳回答 9月3日
  • 创建了问题 8月27日

悬赏问题

  • ¥15 系统 24h2 专业工作站版,浏览文件夹的图库,视频,图片之类的怎样删除?
  • ¥15 怎么把512还原为520格式
  • ¥15 MATLAB的动态模态分解出现错误,以CFX非定常模拟结果为快照
  • ¥15 求高通平台Softsim调试经验
  • ¥15 canal如何实现将mysql多张表(月表)采集入库到目标表中(一张表)?
  • ¥15 wpf ScrollViewer实现冻结左侧宽度w范围内的视图
  • ¥15 栅极驱动低侧烧毁MOSFET
  • ¥30 写segy数据时出错3
  • ¥100 linux下qt运行QCefView demo报错
  • ¥50 F1C100S下的红外解码IR_RX驱动问题