Interviews

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {
    public static class InterleavingPlaylist implements Playlist {
        private int index;
        private List<Playlist> playlists;
        
        public InterleavingPlaylist(@NonNull List<Playlist> playlists) {
            this.playlists = playlists;
            index = 0;
        }

        @Override
        public Track getNextTrack() {
            index = getNextAvailableIndex();
            return playlists.get(index++).getNextTrack();
        }

        @Override
        public boolean hasNextTrack() {
            return getNextAvailableIndex() >= 0;
        }
        
        private int getNextAvailableIndex() {
            for (int i = 0; i < playlists.size(); i++) {
                int idx = (index + i) % playlists.size();
                if (playlists.get(idx).hasNextTrack()) {
                    return idx;
                }
            }
            return -1;
        }
    }

    public interface Playlist {
        Track getNextTrack();
        boolean hasNextTrack();
    }
    
    public static class Track {
        private String name;
        public Track(String name) {
            this.name = name;
        }
        
        @Override
        public String toString() {
            return this.name;
        }
    }
    
    public static class PlayList implements Playlist {
        private List<Track> tracks;
        private Iterator<Track> iterator;
        public PlayList(List<Track> tracks) {
            this.tracks = tracks;
            iterator = this.tracks.iterator();
        }
        
        public Track getNextTrack() {
            return iterator.next();
        }
        
        public boolean hasNextTrack() {
            return iterator.hasNext();
        }
    }

    public static void main(String[] args) {
        List<Track> tracksA = new ArrayList<Track>() {{
            add(new Track("A1"));
            add(new Track("A2"));
            add(new Track("A3"));
        }};
        List<Track> tracksB = new ArrayList<Track>() {{
            add(new Track("B1"));
            add(new Track("B1"));
        }};
        List<Playlist> playlists = new ArrayList<Playlist>();
        playlists.add(new PlayList(tracksA));
        playlists.add(new PlayList(tracksB));
        
        InterleavingPlaylist interleavingPlaylist = new InterleavingPlaylist(playlists);
        while (interleavingPlaylist.hasNextTrack()) {
            System.out.println(interleavingPlaylist.getNextTrack());
        }
   }
}

最后更新于

这有帮助吗?