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()));