Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.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对象成员_Java_Arraylist - Fatal编程技术网

用另一个Java中的数据交换ArrayList对象成员

用另一个Java中的数据交换ArrayList对象成员,java,arraylist,Java,Arraylist,我有一个MP3Track课程,成员包括: 音轨编号(整数)、音轨名称(字符串)、艺术家字符串)等。 我的目录类包含两个ArrayList,一个包含所有曲目(vectorMain),另一个包含fovuorites(vectorFav),它们是主目录中曲目的副本 我希望用户可以选择交换两个曲目编号(在两个阵列中都是唯一的) 我已经添加了下面的代码来实现这一点,它可以工作(如果它们存在的话-ATM),但是看起来相当麻烦。肯定有更好的解决办法 getMainIndex()-返回给定曲目编号或-1在Arr

我有一个MP3Track课程,成员包括: 音轨编号(整数)、音轨名称(字符串)、艺术家字符串)等。 我的目录类包含两个ArrayList,一个包含所有曲目(vectorMain),另一个包含fovuorites(vectorFav),它们是主目录中曲目的副本

我希望用户可以选择交换两个曲目编号(在两个阵列中都是唯一的)

我已经添加了下面的代码来实现这一点,它可以工作(如果它们存在的话-ATM),但是看起来相当麻烦。肯定有更好的解决办法

getMainIndex()-返回给定曲目编号或-1在ArrayList中的索引位置

public void swapTrack(){
    int t1 = -1, t2 = -1;
    System.out.println(face.getSwapTrackMenu());       
    System.out.print("1) Please enter first track number to swap: ");
    t1 = scan.readInt();                                
    System.out.print("2) Please enter second track number to swap: ");
    t2 = scan.readInt();                                

    if((getMainIndex(t1)!=-1)&&(getMainIndex(t2)!=-1)){
        String s1 = null;
        String s2 = null;
        for(MP3Track track : vectorMain){
            if(track.getTrackNo() == t1){
                s1 = track.getTitle();
            }
            if(track.getTrackNo() == t2){
                s2 = track.getTitle();
            }
        }

        for(MP3Track track : vectorMain){
            if(track.getTitle().equals(s1)){
                track.setTrackNo(t2);
            }
            if(track.getTitle().equals(s2)){
                 track.setTrackNo(t1);
            }
        }

        for(MP3Track track : vectorFav){
            if(track.getTitle().equals(s1)){
                track.setTrackNo(t2);
            }
            if(track.getTitle().equals(s2)){
                track.setTrackNo(t1);
            }
        }
    }
}//End moveTrack
我是Java新手,因此任何建议、改进和评论都将受到欢迎

非常感谢

好吧,我也尝试了以下看起来更优雅、更有效的方法???但确实有更好的方法来实现这一点??我错过了什么?我用它撞到了砖墙

    for(MP3Track track : vectorMain){
        if(track.getTrackNo() == t1){
            mp31 = vectorMain.get(getMainIndex(t1));
            //mp31.setTrackNo(t2);
        }
        if(track.getTrackNo() == t2){
            mp32 = vectorMain.get(getMainIndex(t2));
            //mp32.setTrackNo(t1);
        }
    }
    mp31.setTrackNo(t2);
    mp32.setTrackNo(t1);
    vectorMain.add(vectorMain.remove(getMainIndex(t1)));
    vectorMain.add(vectorMain.remove(getMainIndex(t2)));

    for(MP3Track track : vectorFav){
        if(track.getTrackNo() == t1){
            mp31 = vectorFav.get(getFavIndex(t1));
        }
        if(track.getTrackNo() == t2){
            mp32 = vectorFav.get(getFavIndex(t2));
        }
    }
    mp31.setTrackNo(t2);
    mp32.setTrackNo(t1);
    vectorFav.add(vectorFav.remove(getFavIndex(t1)));
    vectorFav.add(vectorFav.remove(getFavIndex(t2)));
非常感谢

您应该使用“indexOf”,它是ArrayList上检索对象索引的方法。我想你知道该怎么做。