private SortedSet<Artist> createArtists(
      List<MusicFolder> folders, String[] ignoredArticles, String[] shortcuts) throws IOException {
    SortedMap<String, Artist> artistMap = new TreeMap<String, Artist>();
    Set<String> shortcutSet = new HashSet<String>(Arrays.asList(shortcuts));

    for (MusicFolder folder : folders) {

      MusicFile parent = musicFileService.getMusicFile(folder.getPath());
      List<MusicFile> children = musicFileService.getChildDirectories(parent);
      for (MusicFile child : children) {
        if (shortcutSet.contains(child.getName())) {
          continue;
        }

        String sortableName = createSortableName(child.getName(), ignoredArticles);
        Artist artist = artistMap.get(sortableName);
        if (artist == null) {
          artist = new Artist(child.getName(), sortableName);
          artistMap.put(sortableName, artist);
        }
        artist.addMusicFile(child);
      }
    }

    return new TreeSet<Artist>(artistMap.values());
  }
 /**
  * Returns the music index to which the given artist belongs.
  *
  * @param artist The artist in question.
  * @param indexes List of available indexes.
  * @return The music index to which this music file belongs, or {@link MusicIndex#OTHER} if no
  *     index applies.
  */
 private MusicIndex getIndex(Artist artist, List<MusicIndex> indexes) {
   String sortableName = artist.getSortableName().toUpperCase();
   for (MusicIndex index : indexes) {
     for (String prefix : index.getPrefixes()) {
       if (sortableName.startsWith(prefix.toUpperCase())) {
         return index;
       }
     }
   }
   return MusicIndex.OTHER;
 }