我有一个类似
的表格ID RANK NAME
--- ----- -----
1 1 abc
1 2 def
1 4 xyz
2 1 pqr
2 5 def
2 3 stu
ID列代表了一组数据。群组可以共享具有不同等级的通用名称。我使用查询
合并并排序上表 SELECT MAX(RANK) R, NAME
FROM TAB
WHERE ID in (1,2)
GROUP BY NAME
ORDER BY R
获取公共名称合并为单行的结果,并按等级排序(如果两行共享同一名称,则为最大排名)
R NAME
---- -----
1 abc
1 pqr
3 stu
4 xyz
5 def
现在,如果我根据java中的每个id检索两个结果集,而不是从db获取这个组合结果,那么在java中合并和排序它们的最有效方法是什么?
答案 0 :(得分:0)
如果使用类Entity
来存储结果集的行,则可以使用以下方法mergeAndSort
以相同的方式合并和排序实体,如上面的SQL语句中所示
final class Entity {
private final int rank;
private final String name;
public Entity(int rank, String name) {
this.rank = rank;
this.name = name;
}
public int getRank() { return rank; }
public String getName() { return name; }
}
public static List<Entity> mergeAndSort(List<Entity> entities) {
Map<String, Entity> map = new HashMap<>();
for (Entity current : entities) {
Entity previous = map.get(current.getName());
if (previous == null || previous.getRank() < current.getRank()) {
map.put(current.getName(), current);
}
}
List<Entity> result = new ArrayList<>(map.values());
Collections.sort(result, new Comparator<Entity>() {
public int compare(Entity lhs, Entity rhs) {
return Integer.compare(lhs.getRank(), rhs.getRank());
}
});
return result;
}