import java.util.*;
class Solution {
private List<List<String>> ans;
public List<List<String>> groupAnagrams(String[] strs) {
return new AbstractList<List<String>>() {
@Override
public List<String> get(int index) {
init();
return ans.get(index);
}
@Override
public int size() {
init();
return ans.size();
}
private void init() {
if (ans != null) return;
ans = new ArrayList<>();
Map<String,List<String>> map = new HashMap<>();
for (int i = 0; i < strs.length; i++) {
String tmp = strs[i];
char[] cs = tmp.toCharArray();
Arrays.sort(cs);
String key = new String(cs);
List<String> list = map.getOrDefault(key,new ArrayList<>());
list.add(tmp);
map.put(key,list);
}
for (List<String> l: map.values()
) {
ans.add(l);
}
}
};
}
}