Zadanie (a dokładniej jego część) jest takie: W pliku allwords.txt, znajdującym się w katalogu {user.home} zapisane są (rozdzielone białymi znakami) słowa. Znaleźć wszystkie anagramy, które można utworzyć z tych słów i wypisać je jako listy słów na konsoli w porządku liczby anagramów. Przy takiej samej liczbie anagramów listy wypisywane są w porządku alfabetycznym pierwszego słowa na liście.
Kod klasy Main (nie można go modyfikować) dla tego zadania wygląda tak:
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws FileNotFoundException {
String home = System.getProperty("user.home");
String allWords = home + "/allwords.txt";
Anagrams an = new Anagrams(allWords);
for(List<String> wlist : an.getSortedByAnQty()) {
System.out.println(wlist);
}
System.out.println("************************");
}
}
Mam taki kod klasy Anagrams:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class Anagrams {
List<ArrayList<String>> listaAnagramow = new ArrayList<ArrayList<String>>();
public Anagrams(String allWords) throws FileNotFoundException {
Scanner scan = new Scanner (new File(allWords));
List <String> slowa = new ArrayList<String>();
while (scan.hasNext()) {
slowa.add(scan.next());
}
scan.close();
while (slowa.isEmpty() == false) {
ArrayList<String> anagramy = new ArrayList<String>();
String wzor = slowa.remove(0);
anagramy.add(wzor);
char[] ch = wzor.toCharArray();
Arrays.sort(ch);
for (int i = 0; i<slowa.size(); i++) {
String slowo = slowa.get(i);
char[] cha = slowo.toCharArray();
Arrays.sort(cha);
if (Arrays.equals(ch, cha)) {
anagramy.add(slowo);
slowa.remove(i);
i--;
}
}
listaAnagramow.add(anagramy);
}
}
public List<ArrayList<String>> getSortedByAnQty() {
return listaAnagramow;
}
}
Wyszukiwanie anagramów działa prawidłowo - tzn. tworzy się odpowiednia lista list i jest wyprowadzana na konsolę. Natomiast nie umiem sobie poradzić z jej posortowaniem zgodnie z wymaganiami zadania, czyli żeby kolejne listy anagramów były prezentowane zaczynając od tej, która zawiera ich najwięcej (a jeżeli dwie listy zawierają ich tyle samo - to w porządku alfabetycznym).
Jak to ugryźć?