2013-10-09 2 views
1

У меня есть этот код, который сортирует мои списки элементов для разных наборов карт (клубы, бриллианты, сердца и лопаты). Есть ли способ написать следующий код, поэтому мне не нужно писать его для каждого ArrayList?Как я могу объединить эти java collection.sort заявления в один?

 String clubsLabel = "Clubs"; 
     String diamondsLabel = "Diamonds"; 
     String heartsLabel = "Hearts"; 
     String spadesLabel = "Spades"; 

     Collections.sort(clubs, new cardIdSorter()); 
     System.out.printf("%-12s", clubsLabel); 
     for(PlayingCard clubsCard: clubs) { 
      System.out.print(clubsCard); 
     } 

     System.out.println(" "); 

     Collections.sort(diamonds, new cardIdSorter()); 
     System.out.printf("%-12s", diamondsLabel); 
     for(PlayingCard diamondsCard: diamonds) { 
      System.out.print(diamondsCard); 
     } 

     System.out.println(" "); 

     Collections.sort(hearts, new cardIdSorter()); 
     System.out.printf("%-12s", heartsLabel); 
     for(PlayingCard heartsCard: hearts) { 
      System.out.print(heartsCard); 
     } 

     System.out.println(" "); 

     Collections.sort(spades, new cardIdSorter()); 
     System.out.printf("%-12s", spadesLabel); 
     for(PlayingCard spadesCard: spades) { 
      System.out.print(spadesCard); 
     } 
+0

Можете ли вы сохранить отсортированный список при вставке элементов? См. Http://stackoverflow.com/questions/4031572/sorted-array-list-in-java – elevine

ответ

2

Напишите собственный метод и позвоните для каждой коллекции.

public static void sortAndPrintCollection(Collection col,String var){ 
Collections.sort(col, new cardIdSorter()); 
     System.out.printf("%-12s", var); 
     for(PlayingCard p: col) { 
      System.out.print(p); 
     }} 

Пример использования

ClassName.collectionSorter(clubs,clubsLabel); 
1

Определить метод, как это -

public void sortAndPrint(ArrayList<PlayingCard> cards, String label) { 
    Collections.sort(cards, new cardIdSorter()); 
    System.out.printf("%-12s", label); 

    for(PlayingCard card: cards) { 
     System.out.print(card); 
    } 
} 

затем вызвать его, как это -

sortAndPrint(clubs, "Clubs"); 
sortAndPrint(diamonds, "Diamonds"); 
sortAndPrint(hearts, "Hearts"); 
sortAndPrint(spades, "Spades"); 
1

Отдельный код в метод:

void sortAndPrint(List<PlayingCard> cards, String label) { 
    Collections.sort(cards, new cardIdSorter()); 
    System.out.printf("%-12s", label); 
    for(PlayingCard card: cards) { 
     System.out.print(card); 
    } 
} 

Затем вызовите метод один раз для каждого набора карт:

sortAndPrint(clubs, clubsLabel); 
sortAndPrint(diamonds, diamondsLabel); 
sortAndPrint(hearts, heartsLabel); 
sortAndPrint(spades, spadesLabel); 
0

Я не проверял, но вы могли бы, вероятно, сделать что-то вроде этого.

Map<> suites = new HashMap<String, ArrayList<PlayingCard>>() {{ 
    put("Clubs",clubs); put("Diamonds",diamonds); put("Hearts",hearts); put("Spades",spades); 
}}; 

for (Map.Entry<String, ArrayList<PlayingCard>> entry : suites.entrySet()) { 
    Collections.sort(entry.getValue(), new cardIdSorter()); 
    System.out.printf("%-12s", entry.getKey()); 
    for(PlayingCard card: entry.getValue()) { 
     System.out.print(card); 
    } 
} 

Добро пожаловать на Java, где рефакторинга кода, чтобы устранить дублирование часто просто делает его еще более уродливой. Обратите внимание, что это создаст новый внутренний класс для инициализации карты.

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