0

我有一个表格TAB

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 检索两个结果集,那么在 java 中合并和排序它们的最有效方法是什么?

4

1 回答 1

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;
}
于 2013-09-13T18:27:18.647 回答