簡體   English   中英

如何僅將不同元素從一個arrayList復制到另一個ArrayList

[英]How to copy only distinct elements from one arrayList to another ArrayList

我有一個名為TwoNumbers的類,該類創建一個包含兩個數字的對象。 我創建了一個包含此對象的ArrayList <>,我想將這些對象復制到新的ArrayList中。

問題是我只想將不同的對象復制到新的ArrayList中。 當對象內部的數字相同時,Java會將每個對象視為不同的對象,但我不知道如何阻止它復制每個對象。

兩個對象包含兩個屬性num1和num2,這些屬性是從fileReader中讀取的。 所以基本上每個TwoNumbers對象的數據是:

1,2 
3,5
5,4
2,1 //accidentally repeated (2,1 means as 1,2)
4,6
1,2 //accidentlly repeated etc.

在主代碼的文件閱讀器中,我讀取了所有這些數據,因此,我在ArrayList中具有TwoNumbers:

TwoNumbers TwoNumbers = new TwoNumbers(num1,num2); // where num's are the  data to create this object 
TwoNumbersArray.add(TwoNumbers);

對於該方法,我試圖在元素不存在時僅將不同的元素添加到newArrayList中。

我的TwoNumber類:public TwoNumbers(int n1,int n2)

{
    if(n1 < n2 ){
        this.num1 = n1;
        this.num2 = n2;
    } else
    {
        this.num2 = n1;
        this.num1 = n2;
    }
}

public int getNum1()
{
    return num1;
}

public int getNum2()
{
    return num2;
}

我嘗試做的方法是:

public void addNew2 (List<TwoNumbers> TwoNumbersArray, List<TwoNumbers> newArrayList){
        for (TwoNumbers e: TwoNumbersArray){
            for (int i = 0; i<TwoNumbersArray.size(); i++){
                if (e.getNum1() != newArrayList.get(i).getNum1() && e.getNum2() != newArrayList.get(i).getNum2()){
                    newArrayList.add(e);
                }
            }
        }
    }

注意:這部分代碼僅適用,因為發問者在其構造函數中使用以下if語句:

if(n1 < n2 ){
    this.num1 = n1;
    this.num2 = n2;
} else {
    this.num2 = n1;
    this.num1 = n2;
}

我不知道我是否正確理解了您的問題,但是請嘗試以下方法:

public List<TwoNumbers> doStuff(List<TwoNumbers> list) {
    List<TwoNumbers> returnList = new ArrayList<>();
    for (int i = 0; i < list.size(); i++) {
        boolean flag = true;
        for (int j = i + 1; j < list.size(); j++) {
            if (list.get(i).getNum1() == list.get(j).getNum1() && list.get(i).getNum2() == list.get(j).getNum2()) {
                flag = false;
            }
        }

        if (flag) {
            returnList.add(list.get(i));
        }
    }
    return returnList;
}

此方法將遍歷列表,如果將flag變量設置為false,則我們知道該對象是重復對象,因此我們不必將其添加到returnList

如果您還有其他問題,或者仍然無法解決問題,請隨時聯系我。

List<TwoNumbers> newList = oldList.stream().distinct().collect(Collectors.toList());

由於您保證在構造函數中,較小的數字將在number1屬性中。 在TwoNumbers類中,重寫這些方法,如下所示。

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + number1;
    result = prime * result + number2;
    return result;
}
@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    TwoNumbers other = (TwoNumbers) obj;
    if (number1 != other.number1)
        return false;
    if (number2 != other.number2)
        return false;
    return true;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM