按字母升序对列表进行排序

时间:2017-04-17 07:10:10

标签: java sorting lambda

我的代码不起作用,我无法弄清楚原因。

它汇编得很好,但结果似乎没有排序。

import java.util.*;

class SortByName {
  public static void main (String[] args) {
    List<String> nameList1 = new ArrayList<>(Arrays.asList("Joe1","Abe1", "Steven1", "Patrict1"));
    List<String> nameList2 = new ArrayList<>(Arrays.asList("Joe22","Abe2", "Steven2", "Patrict2"));

    Comparator<String> comparator1 = (name1, name2)-> { return name1.length() - name2.length(); };
    nameList1.sort(comparator1);


    Comparator<String> comparator2 = Comparator.comparingInt(String::length);
    nameList2.sort(comparator2);

    nameList1.forEach((str)->System.out.println(str));
    nameList2.forEach((str)->System.out.println(str));
  }
}

6 个答案:

答案 0 :(得分:1)

按字符串长度排序, 输出应该是,

对于List1

Joe1
Abe1
Steven1
Patrict1

来自List2:

Abe2
Joe22
Steven2
Patrict2

如果您想按字母顺序对此进行排序,请编辑您的代码,

Comparator<String> comparator1 = (name1, name2)-> { return name1.compareTo(name2); };

答案 1 :(得分:1)

您正在通过字符串长度执行比较,这很好地工作,因为您的输出从最短字符串到最长字符串排序。如果您尝试按字母顺序排序,则需要使用比较函数中内置的String类。这看起来像是:

Comparator<String> comparator1 = (name1, name2)-> { return name1.compareTo(name2); };

答案 2 :(得分:1)

如果要按字母顺序对列表进行排序,可以使用下面的比较器

 Comparator<String> comparator1 = (name1, name2) -> {
        return name1.compareTo(name2);
    };

答案 3 :(得分:0)

尝试以下

Comparator<String> comparator1 = (name1, name2)-> { return name2.length() - name1.length(); };
Comparator<String> comparator2 = Comparator.comparingInt(String::length).reversed();

答案 4 :(得分:0)

阅读Comparator的Javadoc:

  

当第一个参数小于,等于或大于第二个参数时,返回负整数,零或正整数。

您的比较器都没有这样做。

在至少三种情况compare中编写测试以直接调用每个Comparator上的a>b, a=b, a<b,并确保它们在右侧返回1,0或-1场景。只有这样你才能在排序中使用它们。

话虽如此,String的默认比较器是按字母顺序排列的,所以你会得到一个字母顺序,你没有指定一个。

答案 5 :(得分:0)

使用JAVA 8

List<String> nameList1 = new ArrayList<>(Arrays.asList("Joe1", "Abe1", "Steven1", "Patrict1","a"));     
List sorted=nameList1.stream().sorted((s1,s2)->s1.compareTo(s2)).collect(Collectors.toList());
sorted.forEach(s -> System.out.println(s));