Anagram in list of words - Solution

On se retrouve aujourd'hui pour la solution du précédent #KataOfTheWeek proposé par Nicolas en début de semaine !

Voici une solution en java :

public class Main {
    private static final String STRING_FOR_TEST = "portal toto carlo nerve carol tata never coral patrol";

    public static void main(String[] args) {
        System.out.println(Anagrammes.findAllCouplesInText(STRING_FOR_TEST));
    }
}

class Anagrammes {
    static String findAllCouplesInText(String text) {
        String[] words = text.split(" ");
        HashMap<String, List<String>> map = new HashMap<>();
        for (String word : words) {
            String sortedLetters = orderLetters(word);
            if (!map.containsKey(sortedLetters)) {
                map.put(sortedLetters, new ArrayList<>());
            }
            map.get(sortedLetters).add(word);
        }
        return map.values().stream().map(Anagrammes::makeCouples).filter(Optional::isPresent).map(Optional::get).collect(Collectors.joining("\n"));
    }

    static Optional<String> makeCouples(List<String> list) {
        if (list == null || list.isEmpty() || list.size() < 2) {
            return Optional.empty();
        }
        List<String> tmpList = new ArrayList<>();
        for (int i = 0; i < list.size(); ++i) {
            String w1 = list.get(i);
            for (int j = i + 1; j < list.size(); ++j) {
                tmpList.add(w1 + " - " + list.get(j));
            }
        }
        return Optional.of(String.join("\n", tmpList));
    }

    static String orderLetters(String word) {
        char[] tempArray = word.toCharArray();
        Arrays.sort(tempArray);
        return new String(tempArray);
    }
}

A bientôt pour un nouveau #KataOfTheWeek !

TakiVeille

TakiVeille