I want to order an ArrayList of strings by length, but not just in numeric order.
Say for example, the list contains these words:
JavaScript
x
cucumber
aeronomical
bacon
tea
telescopic
fantasmagorical
They need to be ordered by their difference in length to a special string, for example:
JavaScript
intelligent
So the final list would look like this (difference in brackets):
JavaScript
aeronomical (0)
telescopic (1)
fantasmagorical (3) - give priority to positive differences? doesn't really matter
cucumber (3)
bacon (6)
tea (8)
Advertisement
Answer
Use a custom comparator:
JavaScript
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;
}
}
Then sort the list using java.util.Collections.sort(List, Comparator)
.