Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何仅将不同的元素从一个arrayList复制到另一个arrayList_Java_Loops_Arraylist_Foreach - Fatal编程技术网

Java 如何仅将不同的元素从一个arrayList复制到另一个arrayList

Java 如何仅将不同的元素从一个arrayList复制到另一个arrayList,java,loops,arraylist,foreach,Java,Loops,Arraylist,Foreach,我有一个名为TwoNumbers的类,它创建了一个包含两个数字的对象。我创建了一个包含此对象的ArrayList,并希望将这些对象复制到一个新的ArrayList 问题是我只想将不同的对象复制到新的ArrayList。 当对象中的数字可能相同时,Java将每个对象视为不同的,我不知道如何阻止它复制每个对象 两个对象包含num1和num2两个属性,这些属性是从文件读取器读入的。 所以基本上每个TwoNumber对象的数据是: 1,2 3,5 5,4 2,1 //accidentally repe

我有一个名为TwoNumbers的类,它创建了一个包含两个数字的对象。我创建了一个包含此对象的ArrayList,并希望将这些对象复制到一个新的ArrayList

问题是我只想将不同的对象复制到新的ArrayList。 当对象中的数字可能相同时,Java将每个对象视为不同的,我不知道如何阻止它复制每个对象

两个对象包含num1和num2两个属性,这些属性是从文件读取器读入的。 所以基本上每个TwoNumber对象的数据是:

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 = new TwoNumbers(num1,num2); // where num's are the  data to create this object 
TwoNumbersArray.add(TwoNumbers);
对于这个方法,我试图在newArrayList中不存在元素时只添加不同的元素

我的TwoNumber类: 公共两个数字(整数n1,整数n2)

{
如果(n1
我尝试的方法是:

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);
                }
            }
        }
    }
public void addNew2(列出TwoNumberArray,列出newArrayList){
for(两个数字e:TwoNumbersArray){

对于(int i=0;i注意:这段代码只起作用,因为提问者在其构造函数中使用了以下if语句:

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

我不知道我是否正确理解了您的问题,但请尝试以下方法:

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;
}
public List doStuff(列表){
List returnList=new ArrayList();
对于(int i=0;i
此方法将在列表中循环,如果
标志
变量设置为false,我们知道该对象是重复的,因此不必将其添加到
返回列表


如果您还有其他问题,或者这没有回答您的问题,请随时联系我。

注意:这段代码只起作用,因为提问者在其构造函数中使用了以下If语句:

if(n1 < n2 ){
    this.num1 = n1;
    this.num2 = n2;
} else {
    this.num2 = n1;
    this.num1 = n2;
}
List<TwoNumbers> newList = oldList.stream().distinct().collect(Collectors.toList());
if(n1

我不知道我是否正确理解了您的问题,但请尝试以下方法:

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;
}
public List doStuff(列表){
List returnList=new ArrayList();
对于(int i=0;i
此方法将在列表中循环,如果
标志
变量设置为false,我们知道该对象是重复的,因此不必将其添加到
返回列表


如果您有进一步的问题,或者这没有回答您的问题,请随时联系我。

这非常有效,但我对所有这些都很陌生,您能解释一下这些东西吗。特别是循环中的I和j对我来说真的很困惑。另外,当我实施您的解决方案时,行:list.sort(Comparator.comparing(TwoNumber::getNum1));对我来说不起作用,我完全删除了它,这样代码在运行时就不会中断。这部分做了什么?我想我明白了为什么当你提到Lamda时,这一行会中断代码。我使用的是Java 7,看起来lambda直到Java 8才被引入。我认为最后一个问题是,如果去掉它,输出是d按顺序排列,那么什么是一个很好的简单方法来把它们数字化。现在这两个数字正在打印出来,例如1,2 1,3 1,4 1,8等等。如果1,8在1,4之前打印出来会更整洁。@Qwisatz嘿,我更新了我的答案,我注意到
Lambda表达式
实际上可能没有必要。你认为呢意思是说当你说它被破坏时?
Lambda表达式
是在Java 8中实现的,这段代码所做的是通过使用streams循环列表变量
List
,然后通过所谓的静态方法调用
twownumbers:getNum1
将列表中的每个元素与所有其他元素进行比较我可能会读一下这个主题,因为lambda表达式非常方便。在这种情况下,不需要它。@Qwisatz我建议您升级到Java 8,因为lambdas将大大简化此任务。您可能应该打开另一个问题,因为排序与原始主题无关。它工作得非常好,但我非常担心对于所有这一切,你能解释一下这些东西吗?特别是循环中的循环和i和j对我来说真的很困惑。另外,当我实现你的解决方案时,行:list.sort(Comparator.comparating(twownumes::getNum1));对我来说不起作用,我完全删除了它,这样代码在运行时就不会中断。这部分做了什么?我想我明白了为什么当你提到Lamda时,这一行会中断代码。我使用的是Java 7,看起来lambda直到Java 8才被引入。我认为最后一个问题是,如果去掉它,输出是d这两个数字现在正在打印出来。
List<TwoNumbers> newList = oldList.stream().distinct().collect(Collectors.toList());