Mat*_*att 19 java sorting arraylist
我想按长度订购字符串的ArrayList,但不仅仅是按数字顺序.
比如说,列表包含以下单词:
cucumber
aeronomical
bacon
tea
telescopic
fantasmagorical
Run Code Online (Sandbox Code Playgroud)
它们需要按长度差异排序为特殊字符串,例如:
intelligent
Run Code Online (Sandbox Code Playgroud)
所以最终的列表看起来像这样(括号中的差异):
aeronomical (0)
telescopic (1)
fantasmagorical (3) - give priority to positive differences? doesn't really matter
cucumber (3)
bacon (6)
tea (8)
Run Code Online (Sandbox Code Playgroud)
Bar*_*end 29
使用自定义比较器:
public class MyComparator implements java.util.Comparator<String> {
private int referenceLength;
public MyComparator(String reference) {
super();
this.referenceLength = reference.length();
}
public int compare(String s1, String s2) {
int dist1 = Math.abs(s1.length() - referenceLength);
int dist2 = Math.abs(s2.length() - referenceLength);
return dist1 - dist2;
}
}
Run Code Online (Sandbox Code Playgroud)
然后使用排序列表java.util.Collections.sort(List, Comparator).
Sam*_*erz 12
如果你使用的是 java 8 你也可以尝试使用这个 lambda
packages.sort(Comparator.comparingInt(String::length));
Run Code Online (Sandbox Code Playgroud)
Jos*_*son 10
如果您使用的是Java 8+,则可以使用lambda表达式来实现比较器(@ Barend的答案)
List<String> strings = Arrays.asList(new String[] {"cucumber","aeronomical","bacon","tea","telescopic","fantasmagorical"});
strings.sort((s1, s2) -> Math.abs(s1.length() - "intelligent".length()) - Math.abs(s2.length() - "intelligent".length()));
Run Code Online (Sandbox Code Playgroud)
This will help you - String in Ascending order
class StringLengthListSort implements Comparator<String>{
@Override
public int compare(String s1, String s2) {
return s1.length() - s2.length();
}
/**
* @param args
*/
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
StringLengthListSort ss = new StringLengthListSort();
list.add("ram");
list.add("rahim");
list.add("ramshyam");
Collections.sort(list, ss);
System.out.println(list);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39825 次 |
| 最近记录: |