我有一个包含许多字段的查询结果,我必须使用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行应该对收集休息不感兴趣。 请建议我解决方案。
答案 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());
}
}