JAVA中对String数组根据字符长度进行分组并且排序

2024-12-02 09:54:58
推荐回答(2个)
回答(1):

好像也很复杂...
String[] str = {"1", "2", "3", "66", "54", "513", "323", "12", "121"};
Map> map = new HashMap>(); //按照长度区分数据
Set indexSet = new HashSet(); //长度去重
for (String string : str) {
    int length = string.length();
    List list = map.get(length);
    if (list == null) {
        list = new ArrayList();
    }
    list.add(string);
    Collections.sort(list); //默认排序
    indexSet.add(length);
    map.put(length,list);
}
List indexList = new ArrayList();
for (Integer integer : indexSet){
    indexList.add(integer);
}
Collections.sort(indexList); //长度默认排序
JSONArray jsonArray = new JSONArray();
for (Integer integer : indexList){
    List valueList = map.get(integer);
    String[] strings = valueList.toArray(new String[valueList.size()]);
    jsonArray.add(strings);
}
System.out.println(jsonArray.toString());

回答(2):

private static List stringGroupO(String[] strs){
List list1 = new ArrayList();
List list2 = new ArrayList();

for(int i=0;iMap param = new HashMap();
param.put(strs[i].length(), strs[i]);
list1.add(param);
list2.add(strs[i].length());
}
List newList = new ArrayList(new HashSet(list2));
List resultList = new ArrayList();
for(int j =0;jList list = new ArrayList();
for(int k=0;kMap map = (Map)list1.get(k);
if(map.get(newList.get(j)) != null){
list.add(map.get(newList.get(j)));
}
}
resultList.add(list);
}
return resultList;
}