2017-10-05 13 views
0

現在、2つの別々の配列を値で並べ替え、アルファベット順に並べ替えることを試みています。どうやってやるの?2つの別個のJava配列を1つの配列の値で並べ替える

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 
関連する問題