从Java列表中删除重复项

从Java列表中删除重复项,java,list,arraylist,java-8,Java,List,Arraylist,Java 8,我想删除重复的列表,如贝娄 List<DataRecord> transactionList =new ArrayList<DataRecord>(); TUN应该是唯一的有两种可能的解决方案 第一个是重写equals方法。只需添加: public class DataRecord { [.....] private String TUN; @Override public boolean equals(Object o) {

我想删除重复的列表,如贝娄

List<DataRecord> transactionList =new ArrayList<DataRecord>();

TUN应该是唯一的

有两种可能的解决方案

第一个是重写equals方法。只需添加:

public class DataRecord {
    [.....]
    private String TUN; 

    @Override
    public boolean equals(Object o) {
        if (o instanceof DataRecord) {
            DataRecord that = (DataRecord) o;
            return Objects.equals(this.TUN, that.TUN);
        }
        return false;
    }

    @Override
    public int hashCode() {
           return Objects.hashCode(TUN);
    }
}
然后,以下代码将删除重复项:

List<DataRecord> noDuplicatesList = new ArrayList<>(new HashSet<>(transactionList));

如果您已重写了
DataRecord
equals
方法来比较字符串TUN,则可以使用new
Set(transactionList)
删除重复项。@charkoul我的回答解决了您的问题吗?@Xentros我尝试了第一个解决方案,但重复值(基于TUN)没有删除(我已经使用size()方法检查了结果)它们不会从此列表中删除。它将创建另一个没有重复项的结果。这在时间上效率更高complexity@xenteros我知道但是noDuplicatesList.size()=transactionList.size(),如果使用Java8+,您可以使用
Map.putIfAbsent(K,V)
在你的第二个建议中。@t4dohx这是一个好主意point@xenteros第二种方法很好用,谢谢
List<DataRecord> noDuplicatesList = new ArrayList<>(new HashSet<>(transactionList));
Map<String, DataRecord> helper = new HashMap<>();
for (DataRecord dr : transactionList) {
    helper.putIfAbsent(dr.getTUN(), dr);
}
List<DataRecord> noDuplicatesList = new ArrayList<>(helper.values());