我正在为 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/