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());
}
}
}
最后更新于
这有帮助吗?