java - 类型转换和ArrayList

标签 java

我有一个包含许多歌曲对象的 ArrayList。

ArrayList<Song> aSong = new ArrayList<Song>();

Song 类如下所示:

public class Song {
private String sName;
private String sLength;

public Song(String name, String length){
    sName = name;
    sLength= length;

}

public String getName(){
    return sName;

}   

public String getLength(){

    return sLength;
}


public void edit(String name, String length){
    sName = name;
    sLength= length;
}

}

我正在尝试使用 ArrayList 方法“包含”来查看是否存在歌曲

   // example
   aSong.contains("Song 1")

但是即使这首歌确实存在于 ArrayList 中,这也会返回 false。

如有任何帮助,我们将不胜感激,并提前致谢。

最佳答案

不,"Song 1" ArrayList中绝对不存在- 因为这是一个字符串,而不是 Song

三个选项:

  • 检查列表中的每首歌曲,看看它是否具有该名称。这相当容易做到,但如果您在多个地方需要该功能,您肯定希望将其提取到一个单独的方法中。像这样的东西:

    public static Song findSongByName(Iterable<? extends Song> songList,
                                      String name)
    {
        // TODO: Nullity checks
        for (Song song : songList)
        {
            if (song.getName().equals(name))
            {
                return song;
            }
        }
        return null;
    }
    
  • 覆盖equalsSong根据歌曲名称,然后调用aSong.contains(new Song("Song 1") 。这可能不是一个好主意,因为我怀疑如果你有两个 Song名称相同但长度不同的对象,您不希望将它们视为相等。

  • 构建 Map<String, Song>这样您就可以根据歌曲名称在列表中查找歌曲。如果您需要从同一列表中查找多首歌曲,这将是一个好主意。

关于java - 类型转换和ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6971313/

相关文章:

java - Java中字符串的最大长度-调用length()方法

java - Maven3 - 仅调试主要源代码

java - 在 android 中访问 USB 大容量存储设备

java - 在 JTextPane 中将文本加粗并着色时出错

java - 如何修复未通过的 Spring Security Authorization header ?

java - 在系统 Java 版本为 11.0 的 Maven 中设置 Java 版本

java - 连接到 HTTPS 站点时发生 SSLHandshakeException

java - 非常简单使用装饰器模式生成数字

java - 迭代哈希在 Python 和 Java 中返回不同的值

java - Java可序列化(加载对象并打印)