import java.util.Map;
import java.util.List;
import java.util.Arrays;
import java.util.HashMap;
import java.util.ArrayList;
import java.util.stream.Collectors;
public class MyClass {
public static void groupAnagrams(String[] words) {
List<String> list = Arrays.stream(words)
.map(word -> word.toCharArray())
.map(chars -> {Arrays.sort(chars); return new String(chars);})
.collect(Collectors.toList());
Map<String, List<Integer>> map = new HashMap<>();
for (int i = 0; i < list.size(); i++) {
map.putIfAbsent(list.get(i), new ArrayList<>());
map.get(list.get(i)).add(i);
}
for (var entry: map.entrySet()) {
System.out.println(entry.getValue().stream()
.map(index -> words[index])
.collect(Collectors.toList()));
}
}
public static void main(String args[]) {
String[] words = {"demo", "are", "code", "ear", "trap", "rapt", "dome", "part", "mode"};
groupAnagrams(words);
}
}
/*
run:
[code]
[trap, rapt, part]
[demo, dome, mode]
[are, ear]
*/