按长度排序字符串的ArrayList

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)

  • 如果您只想按长度排序:`strings.sort((s1, s2) -&gt; s1.length() - s2.length());` (2认同)

Kri*_*iya 5

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)