随机播放一组对象并在Java中维护分组

时间:2017-09-28 18:56:17

标签: java collections grouping shuffle

我需要随机播放一系列专辑和歌曲。

例如,给定一组随机歌曲:

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

        }
    }
}

1 个答案:

答案 0 :(得分:1)

一些笔记

  1. 这不是一个二维数组。
  2. 你不是在洗牌,而是在洗牌。
  3. 学习使用对象。
  4. 停止依赖数组并使用集合(可能是列表)。
  5. 明确陈述"我需要帮助完成我的作业"。
  6. Map API Page
  7. LinkedList API Page
  8. Comparable API Page
  9. 解决方案的步骤

    1. 为每张专辑制作List首歌曲。 为此使用Map<String, List<Music>>。 专辑名称是地图键(字符串部分)。
    2. 对于输入列表中的每个音乐, 从List<Music>获取正确的Map,并将Music添加到List
    3. 首次在输入列表中找到相册时需要特殊处理。
    4. Map获取密钥列表。
    5. 随机按键列表。
    6. 对于随机密钥列表中的每个元素,获取音乐对象列表并将其附加到播放列表。
    7. 打印播放列表。
    8. 考虑在Comparable对象上实施Music以对相册中的歌曲列表进行排序,或者在将每个音乐对象列表添加到播放列表之前对其进行随机播放。