0

IdをCheck Entity含む 3 つの属性があり、重複を使用してチェックするためにハッシュコードに Id を使用しています。

以下のコードを使用して重複が削除されるようになりました

Set<Check> unique = new LinkedHashSet<Check>(l);
List<Check>  finalLst= new java.util.ArrayList<Check>();
finalLst.addAll(unique);

出力中

これらの 3 つは result(c1,c2 and c3) として来ますが、(c4,c5 and c6) が必要です。

Check c1 = new Check(1,"one");
Check c2 = new Check(2,"two");
Check c3 = new Check(3,"three");


    Check c4 = new Check(1,"one");
    Check c5 = new Check(2,"two");
    Check c6 = new Check(3,"three");

出力は今取得しています:

    id :1 ::2013-04-30 10:42:34.311
    id :2 ::2013-04-30 10:42:34.344
    id :3 ::2013-04-30 10:42:34.344
    id :1 ::2013-04-30 10:42:34.344
    id :2 ::2013-04-30 10:42:34.345
    id :3 ::2013-04-30 10:42:34.345
1 :: 2013-04-30 10:42:34.311
2 :: 2013-04-30 10:42:34.344
3 :: 2013-04-30 10:42:34.344

出力は期待しています:

    id :1 ::2013-04-30 10:42:34.311
    id :2 ::2013-04-30 10:42:34.344
    id :3 ::2013-04-30 10:42:34.344
    id :1 ::2013-04-30 10:42:34.344
    id :2 ::2013-04-30 10:42:34.345
    id :3 ::2013-04-30 10:42:34.345
1 :: 2013-04-30 10:42:34.344
2 :: 2013-04-30 10:42:34.345
3 :: 2013-04-30 10:42:34.345

私のコード全体はここにあります:

package test.collection;

import java.text.SimpleDateFormat;
import java.util.*;

public class RemoveDuplicateInArrayList 
{
    public static void main(String args[])
    {
        Check c1 = new Check(1,"one");
        Check c2 = new Check(2,"two");
        Check c3 = new Check(3,"three");


        Check c4 = new Check(1,"one");
        Check c5 = new Check(2,"two");
        Check c6 = new Check(3,"three");

        List<Check> l = new java.util.ArrayList<Check>();
        l.add(c1);
        l.add(c2);
        l.add(c3);
        l.add(c4);
        l.add(c5);
        l.add(c6);

        List<Check>  finalLst= removeDuplicates(l);
        Iterator<Check> iter = finalLst.iterator();
        while(iter.hasNext())
        {
            Check temp = iter.next();
            System.out.println(temp.getId()+" :: "+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").format(temp.getCreationTme()));
        }

    }
    public static List<Check> removeDuplicates(List<Check> l)
    {
        Set<Check> unique = new LinkedHashSet<Check>(l);
        List<Check>  finalLst= new java.util.ArrayList<Check>();
        finalLst.addAll(unique);
        return finalLst;
    }
}

class Check
{
    public Check(int id,String name)
    {
        this.id = id;
        this.name = name;
        this.creationTme = new Date();
        System.out.println("id :"+this.id+" ::"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").format(this.getCreationTme()));
    }
    private int id;
    private String name;
    private Date creationTme;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }


    public Date getCreationTme() {
        return creationTme;
    }
    public void setCreationTme(Date creationTme) {
        this.creationTme = creationTme;
    }
    @Override
    public int hashCode()
    {
        return this.id;
    }
    @Override
    public boolean equals(Object obj)
    {
        if(obj instanceof Check && ((Check)obj).id == this.id)
            return true;
        else return false;
    }

}
4

4 に答える 4

0

次のように、クラスでインターフェイスを実装してメソッドをComparableオーバーライドできます。compareTo()check

class Check implements Comparable<Check>{

compareTo()方法

@Override
public int compareTo(Check o) {
    if(creationTme.after(o.getCreationTme())){
        return -1;
    }else if(creationTme.before(o.getCreationTme())){
        return 1;
    }
    return 0;
}

重複を削除する前に、次のようにリストを作成できSortます:-

Collections.sort(l);
List<Check> finalLst = removeDuplicates(l);
于 2013-04-30T05:23:07.647 に答える