2013-06-24 46 views
6

Tôi đang lưu trữ scanresult vào danh sách theo mã bên dưới:Làm cách nào để sắp xếp danh sách getScanResults() dựa trên cường độ Tín hiệu theo thứ tự tăng dần?

List<ScanResult> results = wifi.getScanResults(); 
      sb = new StringBuilder(); 
      try 
      { 
       for(int i = 0; i < results.size(); i++){ 
        sb.append(new Integer(i+1).toString() + "."); 
        sb.append("SSID:-").append((results.get(i).SSID).toString()); 
        sb.append("BSSID:-").append((results.get(i).BSSID).toString()); 
        sb.append("Level:-").append((results.get(i).level)); 
        sb.append("Frequency:-").append((results.get(i).frequency)); 
        sb.append("\n\n"); 
       } 
       textStatus.setText(""); 
       textStatus.append("\n\n\n"); 
       textStatus.append(sb); 
      } 

Tôi muốn sắp xếp kết quả này dựa trên cường độ tín hiệu (cấp) vì vậy tôi đang tạo ra một mảng 2D có mức độ dữ liệu và Mac. vì vậy tôi đã viết mã cho này:

String rssi[][]=new String[2][results.size()]; 
for(int i = 0; i <results.size(); i++){ 
     rssi[0][i] = String.valueOf(results.get(i).level); 
     rssi[1][i]= results.get(i).BSSID; 
} 

StringBuilder tmp=new StringBuilder(); 
Arrays.sort(rssi,new Comparator<String[]>() { 
     @Override 
     public int compare(String[] str1, String[] str2) { 
      final String lv1= str1[0]; 
      final String lv2= str2[0]; 
      return lv1.compareTo(lv2); 
     } 
); 

Dựa trên mã trên tôi đang mong đợi rssi[][] theo thứ tự sắp xếp, nhưng nó không phải đang xảy ra ...

Trả lời

9

Hãy thử điều này

 Comparator<ScanResult> comparator = new Comparator<ScanResult>() { 
     @Override 
     public int compare(ScanResult lhs, ScanResult rhs) { 
      return (lhs.level <rhs.level ? -1 : (lhs.level==rhs.level ? 0 : 1)); 
     } 
    } 
    List<ScanResult> results = wifi.getScanResults(); 
    Collections.sort(results, comparator); 

    //Here your list is sorted by level 
+0

cảm ơn rất nhiều. Danh sách được sắp xếp ngay bây giờ .. – user2517884

+4

Bạn cũng có thể tận dụng bộ so sánh được tích hợp vào phương thức 'WifiManager.compareSignalLevel' thay cho câu lệnh trên dòng' return': http://developer.android.com/reference/android/ net/wifi/WifiManager.html # compareSignalLevel (int, int) – sAlexander

Các vấn đề liên quan