src/main/java/org/intellimate/izou/sdk/frameworks/music/player/Playlist.java
public Playlist shuffle() {
        int position = getPosition();
        long seed = System.nanoTime();

        if (position >= 0 && position < queue.size()) {
            List<TrackInfo> trackInfos = queue.subList(0, position);
            List<TrackInfo> notPlayed = queue.subList(position, queue.size());

            List<TrackInfo> shuffledNotPlayed = new ArrayList<>(notPlayed);
            Collections.shuffle(shuffledNotPlayed, new Random(seed));
            trackInfos.addAll(shuffledNotPlayed);
            return new Playlist(trackInfos);
        } else {
            List<TrackInfo> trackInfos = new ArrayList<>(queue);
            Collections.shuffle(trackInfos, new Random(seed));
            return new Playlist(trackInfos);
        }
    }
public Playlist shuffle() {
        int position = getPosition();
        long seed = System.nanoTime();

        if (position >= 0 && position < queue.size()) {
            List<TrackInfo> trackInfos = queue.subList(0, position);
            List<TrackInfo> notPlayed = queue.subList(position, queue.size());

            List<TrackInfo> shuffledNotPlayed = new ArrayList<>(notPlayed);
            Collections.shuffle(shuffledNotPlayed, new Random(seed));
            trackInfos.addAll(shuffledNotPlayed);
            return new Playlist(trackInfos);
        } else {
            List<TrackInfo> trackInfos = new ArrayList<>(queue);
            Collections.shuffle(trackInfos, new Random(seed));
            return new Playlist(trackInfos);
        }
    }
public Playlist shuffle ( ) { int position = getPosition ( ) ; long seed = System . nanoTime ( ) ; if ( position >= 0 && position < queue . size ( ) ) { List < TrackInfo > trackInfos = queue . subList ( 0 , position ) ; List < TrackInfo > notPlayed = queue . subList ( position , queue . size ( ) ) ; List < TrackInfo > shuffledNotPlayed = new ArrayList <> ( notPlayed ) ; Collections . shuffle ( shuffledNotPlayed , new Random ( seed ) ) ; trackInfos . addAll ( shuffledNotPlayed ) ; return new Playlist ( trackInfos ) ; } else { List < TrackInfo > trackInfos = new ArrayList <> ( queue ) ; Collections . shuffle ( trackInfos , new Random ( seed ) ) ; return new Playlist ( trackInfos ) ; } }
Shuffles the playlist and returns the shuffled playlist, so the original stays intact.
Only the part of the playlist after the current position is shuffled.

@return a shuffled copy of this playlist
Shuffles the playlist and returns the shuffled playlist so the original stays intact . Only the part of the playlist after the current position is shuffled .