Java字符串数组的排序arraylist
我有一个程序,它获取一个单词和一个文本文件字典,并在字典中搜索与给定单词相等的单词组合
我最终得到了一个字符串数组的Arraylist,每个数组都是一个包含它使用的单词的解决方案,Arraylist是所有解决方案
然后迭代arraylist并将数组排序为:
List<String> list = Arrays.asList(array);
list.sort(Comparator.comparing(String::length).reversed().thenComparing(String::compareTo));
它首先按单词长度(降序)排序,然后使用字母顺序作为等长单词的分界符
我现在已经对各个数组进行了排序,但我正试图在arraylist中按照某些规则对它们进行排序:
- 按字数递增
- 对于包含相同字数且所有字长相同的数组,数组按字母顺序排序李>
- 字数相等,但长度不同:最长不等长优先。例如,如果a[0]长度==b[0]长度,但b[1]长度>;a[1]长度,b排在第一位李>
它们已经按单词数的升序存储,因为首先找到单个单词的解决方案,然后找到2个单词,依此类推,并附加到arraylist中
现在,由于数组在排序后也是按字长降序排列的,我认为必须有一个简单的比较器来实现上述功能,但我很难做到这一点
# 1 楼答案
首先,无需将数组转换为
List
进行排序其次,应该使用
thenComparing(Comparator.naturalOrder())
而不是thenComparing(String::compareTo)
,因为这将使用一个单态Comparator
,而不是创建一个新的Comparator
委托给方法引用至于你的问题,我不认为存在一个
Comparator
的问题,所以就创建你自己的问题。用thenComparing()
建造一个化合物Comparator
是不错的,但并不总是正确的方式因此,您的代码可能是(假设我正确地获得了排序条件):