我的代码不起作用,我无法弄清楚原因。
它汇编得很好,但结果似乎没有排序。
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));
}
}
答案 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));