我需要随机播放一系列专辑和歌曲。
例如,给定一组随机歌曲:
[AlbumB:Song3, AlbumA:Song2, AlbumB:Song1, AlbumA:Song1, AlbumB:Song2, AlbumC:Song1]
shuffle方法的输出可能是:
[AlbumB:Song1, AlbumB:Song2, AlbumB:Song3, AlbumC:Song1, AlbumA:Song1, AlbumA:Song2]
请注意,每张专辑的歌曲都组合在一起。 再次调用shuffle方法可能会产生以下结果:
[AlbumC:Song1, AlbumA:Song1, AlbumA:Song2, AlbumB:Song1, AlbumB:Song2, AlbumB:Song3].
我的节目如下, 我无法让分组工作:
import java.util.Arrays;
import java.util.Collections;
public class Music {
public final String album;
public final String song;
public Music(String album, String song) {
this.album = album;
this.song = song;
}
public static void main(String args[]) {
Music music1 = new Music("AlbumB","Song3");
Music music2 = new Music("AlbumA","Song2");
Music music3 = new Music("AlbumB","Song1");
Music music4 = new Music("AlbumA","Song1");
Music music5 = new Music("AlbumB","Song2");
Music music6 = new Music("AlbumC","Song1");
Music[] musicArr = new Music[]{
new Music("AlbumB","Song3"),new Music("AlbumA","Song2"),new Music("AlbumB","Song1"),
new Music("AlbumA","Song1"),new Music("AlbumB","Song2"),new Music("AlbumC","Song1")
};
System.out.println("Before Shuffle ");
for (Music music : musicArr) {
System.out.println(music.album + " " + music.song);
}
Collections.shuffle(Arrays.asList(musicArr));
System.out.println("After Shuffle ");
for (Music music : musicArr) {
System.out.println(music.album + " " + music.song);
}
}
}
答案 0 :(得分:1)
一些笔记
解决方案的步骤
List
首歌曲。
为此使用Map<String, List<Music>>
。
专辑名称是地图键(字符串部分)。List<Music>
获取正确的Map
,并将Music
添加到List
。Map
获取密钥列表。Comparable
对象上实施Music
以对相册中的歌曲列表进行排序,或者在将每个音乐对象列表添加到播放列表之前对其进行随机播放。