2017-10-05 54 views
0

我目前正在嘗試按值排序兩個單獨的數組,然後按字母順序排列的名稱。我怎樣才能做到這一點?按一個數組的值排序兩個單獨的Java數組

String[] players = new String[5]; 
int[]goalsByPlayer = new int[5]; 
players = {a, b, c, d, e}; 
goalsByPlayer = {3, 0, 0, 0, 0}; 

1. a 3 goals 
2. b 0 goals 
3. c 0 goals 
4. d 0 goals 
5. e 0 goals 

如果我改變了目標C的量有4個,則列表將有望成爲...

1. c 4 goals 
2. a 3 goals 
3. b 0 goals 
4. d 0 goals 
5. e 0 goals 

請給點建議!編輯: 這是我寫的代碼。

for (int w = 0; w < number; w++) { 
          goalsByPlayer[w] *= -1; 
         } 

         Arrays.sort(sort); 

         for (int w = 0; w < number; w++) { 
          goalsByPlayer[w] *= -1; 
         } 

for (int p = 0; p < number; p++) { 

          System.out.println((p + 1) + ". " + players[p] + " " + goalsByPlayer[p] + " goals"); 


         } 

我只是不知道如何讓字符串匹配它們在數組中的整數。

實際輸出:

1. a 4 goals 
    2. b 3 goals 
    3. c 0 goals 
    4. d 0 goals 
    5. e 0 goals 
+0

要做到這一點,最好的方法是將兩個值(「玩家」和「目標」)放入一個對象(您製作的課程)中並對其進行排序。否則,請顯示您編寫的代碼,我們會提供幫助。 – markspace

+0

建議 - 閱讀java.util.Comparator接口:https://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html – EJK

回答

1
public static void main(String[] args) { 
    // Input data 
    String[] players = {"a","b","c","d","e"}; 
    int[] goalsByPlayer = {3,0,0,4,0}; 

    // Put all of them into Map 
    Map<String, Integer> unsortMap = new HashMap<>(); 
    for (int i = 0; i < players.length; i++) { 
     unsortMap.put(players[i], goalsByPlayer[i]); 
    } 

    System.out.println("Unsort Map......"); 
    printMap(unsortMap); 

    // Sort by value with reverse order 
    Map sorted = unsortMap.entrySet().stream() 
     .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())) 
     .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, 
      (oldValue, newValue) -> oldValue, LinkedHashMap::new)); 

    System.out.println("\nSorted Map......By Value"); 
    printMap(sorted); 
} 

// print a map 
public static <K, V> void printMap(Map<K, V> map) { 
    for (Map.Entry<K, V> entry : map.entrySet()) { 
     System.out.println("Key : " + entry.getKey() 
      + " Value : " + entry.getValue()); 
    } 
} 

輸出

Unsort Map...... 
Key : a Value : 3 
Key : b Value : 0 
Key : c Value : 0 
Key : d Value : 4 
Key : e Value : 0 

Sorted Map......By Value 
Key : d Value : 4 
Key : a Value : 3 
Key : b Value : 0 
Key : c Value : 0 
Key : e Value : 0 
0

它們添加到地圖和使用Java中可流8.

String[] players = { "a", "b", "c", "d", "e" }; 
int[] goalsByPlayer = { 3, 0, 0, 4, 0 }; 
Map<String, Integer> map = new HashMap<String, Integer>(); 
for (int i = 0; i < players.length; i++) map.put(players[i], goalsByPlayer[i]); 
Map<String, Integer> sortedMap = new LinkedHashMap<>(); 
map.entrySet().stream().sorted(Map.Entry.<String, Integer>comparingByValue().reversed()).forEachOrdered(e -> sortedMap.put(e.getKey(), e.getValue())); 
for (String key : sortedMap.keySet()) System.out.println("Player: " + key + " goals: " + sortedMap.get(key)); 

這裏是輸出

Player: d goals: 4 
Player: a goals: 3 
Player: b goals: 0 
Player: c goals: 0 
Player: e goals: 0