基于多个键在集合中插入元素

时间:2017-02-26 11:12:05

标签: java collections hashmap hashset treeset

我有一个包含许多字段的查询结果,我必须使用java代码基于表的3列插入集合中的唯一行。

假设查询结果如下:

Col A | Col B | Col C | Col D | Col E

1 | 2 | 1 | V1 |甲

1 | 2 | 1 | V2 |甲

2 | 1 | 1 | V3 |乙

3 | 2 | 2 | V4 | ç

2 | 1 | 1 | V5 |乙

此处,第1行和第2行按照col A + Col B + Col C的组合重复 第3行和第5行也是重复的。

所以我必须在集合中插入基于col A,col B和Col C

的唯一值

结果:第1,3,4行应该对收集休息不感兴趣。 请建议我解决方案。

1 个答案:

答案 0 :(得分:1)

您可以为每行创建一个包含5个字段的POJO,并使用不允许重复的Set。让POJO实现equals和hashcode,你定义什么等于平均值​​。

示例:

public class Row {

    private Integer col1;
    private Integer col2;
    private Integer col3;
    private Integer Col4;
    private Integer Col5;

    public Row(Integer col1, Integer col2, Integer col3) {
        this.col1 = col1;
        this.col2 = col2;
        this.col3 = col3;
    }

    //gets sets

    public Integer getCol1() {
        return col1;
    }

    public Integer getCol2() {
        return col2;
    }

    public Integer getCol3() {
        return col3;
    }

    @Override
    public boolean equals(Object o) {
        if (o == null || !(o instanceof Row))
            return false;

        if (this == o)
            return true;

        Row other = (Row)o;
        if (col1.equals(other.getCol1()) && col2.equals(other.getCol2()) && col3.equals(other.getCol3())) {
            return true;
        }
        return false;
    }
    @Override
    public int hashCode() {
        return col1+col2+col3;
    }
}

测试:

public static void main(String args[]){
    Main m = new Main();
    Row r1 = m.new Row(1,1,2);
    Row r2 = m.new Row(2,3,4);
    Row r3 = m.new Row(1,1,2);
    Row r4 = m.new Row(2,3,2);

    Set<Row> set = new HashSet<>();
    set.add(r1);
    set.add(r2);
    set.add(r3);
    set.add(r4);

    for (Row row : set) {
        System.out.println(row.getCol1() + ":" + row.getCol2() + ":" + row.getCol3());
    }
}