Java 是一个数组列表按顺序包含另一个数组列表

标签 java android arraylist contains

我正在为 Android 制作一个应用程序。我试图猜测用户刚刚用木琴演奏的歌曲。我有:private List<String> mDespacito = new ArrayList<String>(Arrays.asList("f", "a","d","d"));private List<String> mPlayed = new ArrayList<String>();当用户按下木琴上的一个键时,我将他按下的键添加到 mPlayed 数组列表中,如下所示:

public void playD(View v){
    Log.d("Xylophone", "Played D!");
  mSoundPool.play(mDSoundId,LEFT_VOLUME,RIGHT_VOLUME,PRIORITY,NO_LOOP,NORMAL_PLAY_RATE);
    mPlayed.add("d");
    CheckForSong();

}

现在,CheckForSong 包含:

public void CheckForSong(){
    if (mPlayed.containsAll(mDespacito)){
        Log.d("Xylophone","You just played despacito");
        mPlayed.removeAll(mDespacito);
    }
}

所以,应该这样做:

played F
played A
played D
played D
You just played despacito

但确实如此:

played F
played A
played D
You just played despacito
played D

你甚至可以这样做:

played F
played G
played A
played G
played D
You just played despacito

我知道为什么:因为 if (mPlayed.containsAll(mDespacito))只是检查 mDespacito 的元素是否在 mPlayed 中。但我需要检查是否存在 mDespacito 的所有元素(包括那些出现两次的元素)以及它们的顺序是否正确。有没有类似的命令我可以使用?谢谢

最佳答案

Collections.indexOfSubList 就是答案。我这样使用它:

public void CheckForSong(){
    int contains = Collections.indexOfSubList(mPlayed, mDespacito);
    if (contains != -1){
        Log.d("Xylophone","You just played despacito");
        mPlayed.removeAll(mDespacito);
    }
}

有关Collections.indexOfSubList的更多信息: https://www.tutorialspoint.com/java/util/collections_indexofsublist.htm

关于Java 是一个数组列表按顺序包含另一个数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46816335/

相关文章:

java - 使用transformClassesWithDexBuilderForDebug在ionic中构建Android失败,进程为okhttp-3.13.1.jar

java - 问题将递增的类成员变量添加到循环内的数组列表

java - LinkedIn 集成到 Android 应用程序中

Java - SwingWorker 和 SwingUtilities.invokeLater() 之间的区别

java - 共享元素转换后如何使用动画

android - Android versionName 要求

java - 如果在 HotSpot JVM 中启用了偏向锁定,对象的哈希码存储在哪里?

android - 写入 sdCard 时权限被拒绝

java - 将 ASN1 包从标准 Java (JRE 1.5+) 迁移到 J2ME (CLDC 1.1)

java - 将逗号分隔的字符串转换为尾随逗号分隔的数组列表