Java 按字符串排序

Java 按字符串排序,java,Java,我正在尝试实现快速排序,以对所有数值的字符串值列表进行排序 它看起来像[“1”、“2”、“3”、“4”、“5”]等等 我使用下面的代码来比较元素 public class TypeComparator<E> implements Comparator<E> { @Override public int compare(E a, E b) { return ((Comparable<E>) a).compareTo(b);

我正在尝试实现快速排序,以对所有数值的字符串值列表进行排序

它看起来像
[“1”、“2”、“3”、“4”、“5”]
等等

我使用下面的代码来比较元素

public class TypeComparator<E> implements Comparator<E> {
    @Override
    public int compare(E a, E b) {
        return ((Comparable<E>) a).compareTo(b);
    }
}
前5个值明显错误,后5个值应为99996-100000

对于整数值,排序工作正常,但是对于字符串,我认为我没有正确比较它们。

List strings=new ArrayList(Arrays.asList(“1”、“2”、“10”、“5”);
    List<String> strings = new ArrayList<>(Arrays.asList("1", "2", "10", "5"));
    strings.sort(Comparator.comparing(Integer::parseInt));
strings.sort(Comparator.comparing(Integer::parseInt));
对于大型阵列,可能会更快

    List<String> sorted = strings.stream()
            .mapToInt(Integer::parseInt)
            .sorted()
            .mapToObj(String::valueOf)
            .collect(Collectors.toList());
List sorted=strings.stream()
.mapToInt(整数::parseInt)
.已排序()
.mapToObj(字符串::valueOf)
.collect(Collectors.toList());

无需为
整数类实现比较器
Integer
类已经实现了
Comparable
接口,并且具有
compareTo
方法。这意味着您可以仅使用TreeSet对Integer、Long、BigDecimal等类进行排序:

List<String> strings = new ArrayList<>(Arrays.asList("1", "2", "10", "5"));
Set<Integer> sorted = new TreeSet<>();
for(String s : strings) {
   sorted.add(Integer.valueOf(s));
}
sorted.forEach(el -> System.out.println(el));
List strings=newarraylist(Arrays.asList(“1”、“2”、“10”、“5”));
Set sorted=新树集();
用于(字符串s:字符串){
已排序的.add(Integer.valueOf(s));
}
sorted.forEach(el->System.out.println(el));
这个解决方案并不是您真正想要的,因为它返回一个排序整数的集合,而不是字符串,但值得在将来记住这一点

尝试按排序

  • 弦长
  • 字符串本身
  • 像这样

    list.sort(Comparator.comparing(String::length)
                        .thenComparing(Function.identity()));
    

    为什么首先要使用字符串来保存整数?另外,请注意比较器是不安全的,它与Comparator.naturalOrder()等效。您已经成功地进行了排序。您已经成功地完成了排序。正在使用字符串的自然字典顺序对字符串进行排序。因此,您不应该期望字符串按其数值的升序排序,因为首先,大多数字符串并不表示数字。@JBNizet我可能错了,但我相信我应该按升序对这两个值进行排序,就像按数字排序一样。我还没有考虑到我可能需要允许它按字典顺序排序。我会问我的教授。
    list.sort(Comparator.comparing(String::length)
                        .thenComparing(Function.identity()));