2017-02-26 15 views
-4

私は多くのフィールドを持つクエリ結果を持っており、コレクションの中にJavaコードを使用して3つの列に基づいてユニークな行のみを挿入する必要があります。複数のキーに基づいてコレクションの要素を挿入します

クエリ結果が以下のようになっているとします。

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

1 | 2 | 1 | V1 | A

1 | 2 | 1 | V2 | A

2 | 1 | 1 | V3 | B

3 | 2 | 2 | V4 | C

2 | 1 | 1 | V5 | B

ここで、行1および2は、col A + Col B + Col Cの組み合わせごとに重複している。 と3行5行も重複している。

ので、私は唯一のユニークなコルAに基づいて、コレクション内の値、列BとCコル

結果を挿入する必要があります:行1,3,4コレクションレストに興味があるべきではいけません。 私に解決策を提案してください。

+0

任意のロジック?結果はCol D列で並べられますか?既に 'distinct'節をクエリに追加できませんか? – Marvin

+0

[なぜ誰かが私を助けることができますか?実際の質問ではありませんか?](http://meta.stackoverflow.com/q/284236) – EJoshuaS

答えて

1

各行に5つのフィールドを持つPOJOを作成し、重複を許可しないSetを使用することができます。 POJOはequalsとhashcodeを実装し、equalsの意味を定義します。

例:

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

テスト:行2上行1を選択理由として

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

ありがとうございます。しかし、コードごとにCol A、Col B、Col Cの値しか得られません。Col A、Col B、およびColの一意の組み合わせに対応する他の列(Col D、Col E)の値を取得するにはどうすればよいでしょうか? Col C. – user3764591

+0

私はその作業を試みました。本当にありがとうございます。 – user3764591

+0

残りの列のゲッターとセッターを追加する –

関連する問題