I want to order an ArrayList of strings by length, but not just in numeric order.
Say for example, the list contains these words:
cucumber aeronomical bacon tea telescopic fantasmagorical
They need to be ordered by their difference in length to a special string, for example:
intelligent
So the final list would look like this (difference in brackets):
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:
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)
.