根据多个键在集合中插入元素

insert elements in the collection based on multiple keys

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

假设查询结果如下:

A 栏 |上校 B |上校 C |上校| E 栏

1 | 2 | 1 | V1 |一个

1 | 2 | 1 | V2 |一个

2 | 1 | 1 | V3 | B

3 | 2 | 2 | V4 | C

2 | 1 | 1 | V5 | B

根据 col A + Col B + Col C 的组合,第 1 行和第 2 行重复 第 3 行和第 5 行也是重复的。

所以我必须在基于 col A、col B 和 col C 的集合中仅插入唯一值

结果:第 1、3、4 行应该对其余的集合感兴趣。 请建议我解决方案。

您可以创建一个每行有 5 个字段的 POJO,并使用一个不允许重复的 Set。让 POJO 实现等号和哈希码,您可以在其中定义等号的含义。

示例:

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());
    }
}