【问题标题】:Swapping ArrayList objects member with data in another - Java用另一个数据交换 ArrayList 对象成员 - Java
【发布时间】:2013-11-10 21:52:40
【问题描述】:

我有一个有成员的 MP3Track 类: 曲目编号(int),曲目名称(字符串),艺术家字符串),faourites(布尔值)等。 我的目录类包含两个 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 新手,因此对任何建议、改进和 cmets 表示赞赏。

非常感谢

好吧,我也尝试了以下看起来更优雅且有效的方法???但是,有更好的方法来实现这一目标吗?我错过了什么?我在这里碰到了一堵砖墙!

    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)));

非常感谢

【问题讨论】:

    标签: java arraylist


    【解决方案1】:

    您应该使用“indexOf”,它是 ArrayList 上检索对象索引的方法。我想你知道如何从那里开始。 http://docs.oracle.com/javase/1.4.2/docs/api/java/util/ArrayList.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多