2014-04-11 2 views
0

Так что я пытаюсь сортировать свою музыку в алфавитном порядке, но ничего, кажется, работает, то с другой вопрос, который мне сказал, чтобы использовать этот код, чтобы отсортировать мое содержание -Как решить ошибку сортировки ArraysList?

Collections.sort(songsList, new Comparator<File>() { 

      @Override 
      public int compare(File o1, File o2) { 
       return o1.getName().compareTo(o2.getName()); 
      } 
     }); 

Поэтому я добавил это к моей функции как это -

public ArrayList<HashMap<String, String>> getPlayList() { 
     System.out.println(MEDIA_PATH); 
     if (MEDIA_PATH != null) { 
      File home = new File(MEDIA_PATH); 
      File[] listFiles = home.listFiles(); 
      if (listFiles != null && listFiles.length > 0) { 
       for (File file : listFiles) { 
        System.out.println(file.getAbsolutePath()); 
        if (file.isDirectory()) { 
         scanDirectory(file); 
        } else { 
         addSongToList(file); 
        } 
       } 
      } 
     } 
     Arrays.sort(songsList, new Comparator<File>() { 

      @Override 
      public int compare(File o1, File o2) { 
       return o1.getName().compareTo(o2.getName()); 
      } 
     }); 
     // return songs list array  
     return songsList; 
    } 

Тогда я получил эту ошибку

The method sort(List<T>, Comparator<? super T>) in the type Collections is not applicable for the arguments (ArrayList<HashMap<String,String>>, new 
Comparator<File>(){}) 

Таким образом, после некоторых исследований я полагаю, что я должен был изменить Collections.sort к Arrays.sort но все равно не повезло.

Если вы могли бы помочь мне в том, как исправить это, это будет здорово.

Полный класс -

package com.ascendapps.nexplay; 

import java.io.File; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Collections; 
import java.util.Comparator; 
import java.util.HashMap; 

import android.os.Environment; 

public class SongsManager { 
    final String MEDIA_PATH = Environment.getExternalStorageDirectory() 
      .getPath() + "/"; 
    private ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>(); 
    private String mp3Pattern = ".mp3"; 

    // Constructor 
    public SongsManager() { 

    } 

    /** 
    * Function to read all mp3 files and store the details in 
    * ArrayList 
    * */ 
    public ArrayList<HashMap<String, String>> getPlayList() { 
     System.out.println(MEDIA_PATH); 
     if (MEDIA_PATH != null) { 
      File home = new File(MEDIA_PATH); 
      File[] listFiles = home.listFiles(); 
      if (listFiles != null && listFiles.length > 0) { 
       for (File file : listFiles) { 
        System.out.println(file.getAbsolutePath()); 
        if (file.isDirectory()) { 
         scanDirectory(file); 
        } else { 
         addSongToList(file); 
        } 
       } 
      } 
     } 
     Arrays.sort(songsList, new Comparator<File>() { 

      @Override 
      public int compare(File o1, File o2) { 
       return o1.getName().compareTo(o2.getName()); 
      } 
     }); 
     // return songs list array  
     return songsList; 
    } 

    private void scanDirectory(File directory) { 
     if (directory != null) { 
      File[] listFiles = directory.listFiles(); 
      if (listFiles != null && listFiles.length > 0) { 
       for (File file : listFiles) { 
        if (file.isDirectory()) { 
         scanDirectory(file); 
        } else { 
         addSongToList(file); 
        } 

       } 
      } 
     } 
    } 

    private void addSongToList(File song) { 
     if (song.getName().endsWith(mp3Pattern)) { 
      HashMap<String, String> songMap = new HashMap<String, String>(); 
      songMap.put("songTitle", 
        song.getName().substring(0, (song.getName().length() - 4))); 
      songMap.put("songPath", song.getPath()); 

      // Adding each song to SongList 
      songsList.add(songMap); 
     } 
    } 
} 

ответ

4

Ваш Comparator сравнивает File с, вы сравниваете String с, следовательно, передавая недопустимый общий тип, который не будет компилировать.

Возможно, вам даже не понадобится Comparator, принятый в вашем методе sort, если вы используете лексикографическое сравнение по умолчанию String.

Если вам нужна songList переменная ArrayList<HashMap<String, String>>, вам необходимо использовать Comparator<HashMap<String, String>>, что для меня звучит как потенциальная проблема с дизайном.

+0

Спасибо за информацию, я буду помнить об этом, еще одна вещь, хотя я не совсем ее полностью понял. Как я могу исправить эту ошибку? Есть ли другой способ сортировки моего контента? – SmallVille

+0

@SmallVille, пожалуйста. Чтобы решить вашу ошибку, используйте «Сравнитель» типа, который вы сравниваете (прямо сейчас, это будет 'HashMap ' я думаю) или по умолчанию 'Comparator' (аргумент' Comparator'). В нижней строке вы, вероятно, не хотите сравнивать «Карту» в своем естественном порядке, поэтому вам может потребоваться решить пользовательский 'Object' и переопределить 'toString', но это действительно сложно сказать с кодом, который вы опубликовали, и, возможно, относятся к разным объемам, чем ваш текущий вопрос. – Mena

+0

Я опубликовал свой полный класс, если вы не против взглянуть и посмотреть, можете ли вы помочь мне решить эту проблему, так как у меня проблемы с этим. изменение компаратора на HashMap вызывает много ошибок. – SmallVille

Смежные вопросы