我有一个带有2列的sql输出(userID,projectID)。有多个条目,没有条目为空或空。
我想生成一个包含2列(userID,userID)的网络建模列表,如果他们共享projectID
,则会将2个用户列在一起,例如
输入
userID projectID
1 201
1 502
2 502
2 101
3 201
3 502
输出
userID userID
1 2
1 3
2 3
基本上我想要一个像
这样的比较的SQL WHERESELECT u1.userID, u2.userID
FROM user_project u1
JOIN user_project u2 ON u1.projectID = u2.projectID
但在Java中。产生的元组可以是不同的,也可以不是,结果的顺序无关紧要。我无法使用此查询直接查询数据库,因为我没有数据库访问权限,只能访问输出txts。
我认为这可能是在带有HashMap或ArrayList的for循环中完成的,但有没有更有效的方法呢?或者是否有一个允许我在Java对象上使用类似SQL的命令的包?
答案 0 :(得分:2)
您可以通过三个步骤实现此结果:
ProjectID
的哈希地图构建为UserID
s 如果使用消除重复的集合,第三步可以与第二步结合使用,例如Set
。
这将在性能方面同样有效,因为所有搜索都将以摊销的O(1)完成。
答案 1 :(得分:2)
还是有一个包允许我在Java对象上使用类似SQL的命令吗?
是。想到两个主要的图书馆......
如果您想要支持多种格式的内容,您还可以使用Apache Commons CSV库首先将该文件解析到该集合中。
答案 2 :(得分:0)
1) 使用projectID作为KEY创建一个HashMap,并将UserID的Ordered LinkedList作为值创建。 示例:
PROJECT_ID USERID
201 1 => 3
502 1 => 2 => 3
2) 一旦你的HashMap如上构建,那么你可以逐个迭代HashMap中的所有条目,并可以打印所需的输出。 由于我们创建的链表是有序的,您可以再次遍历链表并按顺序打印输出。
3) 你可以将结果存储为字符串说" 12" ," 13"," 23"并且可以对它们进行排序并删除重复的条目。