Java将列表行与列表

时间:2015-06-08 02:26:49

标签: java

我有一个带有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 WHERE
SELECT u1.userID, u2.userID
FROM user_project u1
JOIN user_project u2 ON u1.projectID = u2.projectID

但在Java中。产生的元组可以是不同的,也可以不是,结果的顺序无关紧要。我无法使用此查询直接查询数据库,因为我没有数据库访问权限,只能访问输出txts。

我认为这可能是在带有HashMap或ArrayList的for循环中完成的,但有没有更有效的方法呢?或者是否有一个允许我在Java对象上使用类似SQL的命令的包?

3 个答案:

答案 0 :(得分:2)

您可以通过三个步骤实现此结果:

  • ProjectID的哈希地图构建为UserID s
  • 列表
  • 对于每个长度为2或更长的列表,请创建所有对,例如,使用两个嵌套循环
  • 从结果中删除重复对

如果使用消除重复的集合,第三步可以与第二步结合使用,例如Set

这将在性能方面同样有效,因为所有搜索都将以摊销的O(1)完成。

答案 1 :(得分:2)

  

还是有一个包允许我在Java对象上使用类似SQL的命令吗?

是。想到两个主要的图书馆......

  1. querydsl.com - 在Java Collections,JPA,JDO等上运行类型安全的查询。
  2. jooq.org - 是否相同
  3. 如果您想要支持多种格式的内容,您还可以使用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"并且可以对它们进行排序并删除重复的条目。