写点什么

13 | 线性排序:如何根据年龄给 100 万用户数据排序?

作者:鲁米
  • 2023-12-06
    北京
  • 本文字数:926 字

    阅读完需:约 3 分钟

13 | 线性排序:如何根据年龄给100万用户数据排序?

假设我们现在需要对 D,a,F,B,c,A,z 这个字符串进行排序,要求将其中所有小写字母都排在大写字母的前面,但小写字母内部和大写字母内部不要求有序。比如经过排序之后为 a,c,z,D,F,B,A,这个如何来实现呢?如果字符串中存储的不仅有大小写字母,还有数字。要将小写字母的放到前面,大写字母放在最后,数字放在中间,不用排序算法,又该怎么解决呢?


你可以使用 Java 的Comparator接口来定义自定义的排序规则。对于第一个问题,你可以创建一个Comparator,首先按照字符的大小写进行排序,然后按照字符本身的顺序排序。对于第二个问题,你可以定义一个更复杂的排序规则,首先将小写字母排在前面,然后是数字,最后是大写字母。以下是示例代码:


public class CustomSort {
public static void main(String[] args) { String input = "D3aF9Bc1Az";
Character[] charArray = input.chars().mapToObj(c -> (char) c).toArray(Character[]::new);
// 对字符数组进行排序,使用自定义的 Comparator Arrays.sort(charArray, Comparator.comparingInt((Character c) -> { if (Character.isLowerCase(c)) { return 0; } else if (Character.isDigit(c)) { return 1; } else { return 2; } }).thenComparingInt(Character::toLowerCase));
String result = Arrays.toString(charArray); System.out.println(result); // 输出:acfz1349DBA }}
复制代码


public class CustomSort {
public static void main(String[] args) { String input = "DaFBcAz";
Character[] charArray = input.chars().mapToObj(c -> (char) c).toArray(Character[]::new);
// 对字符数组进行排序,使用自定义的 Comparator Arrays.sort(charArray, Comparator.comparingInt((Character c) -> Character.toLowerCase(c)) .thenComparingInt(Character::getNumericValue));
String result = Arrays.toString(charArray); System.out.println(result); // 输出:aBcDFAz }}
复制代码


发布于: 刚刚阅读数: 5
用户头像

鲁米

关注

生活黑客35 2019-06-11 加入

起点不重要,迭代很重要,就需要保持充分的开放和积累;而信息越充分,结果越可靠,又要求随时调整、不断逼近真相。

评论

发布
暂无评论
13 | 线性排序:如何根据年龄给100万用户数据排序?_鲁米_InfoQ写作社区