![](/img/trans.png)
[英]How to copy elements from an ArrayList to another one NOT by reference?
[英]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.