gpt4 book ai didi

java - 如何对包含数字的字符串集合进行排序?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:30:59 25 4
gpt4 key购买 nike

我有一个包含如下数据的字符串 vector :

5:34, 5:38, 17:21, 22:11, ...

如果我尝试使用 Collections.sort( ... ); 合并它,它将显示如下:

17:21, 22:11, 5:34, 5:38

其实我希望它看起来像这样:

5:34, 5:38, 17:21, 22:11

所以我想根据冒号“:”之前的数字对元素进行排序,然后如果某些元素在“:”之前的数字相同,则根据“:”之后的数字对它们进行排序。

最简单的方法是什么?

最佳答案

执行此操作的正确方法是不要将非字符串值存储为字符串。

您集合中的数据具有一定的结构和规则,不能是任意字符串。因此,您不应使用 String 数据类型。

让我们定义一个名为 TwoNumbers 的类型(因为我不知道该类型应该表示什么,即使我能猜到):

class TwoNumbers implements Comparable<TwoNumbers> {
private final int num1;
private final int num2;

public TwoNumbers(int num1, int num2) {
if (num1 <= 0 || num2 <= 0) {
throw new IllegalArgumentException("Numbers must be positive!");
}
this.num1 = num1;
this.num2 = num2;
}

public static TwoNumbers parse(String s) {
String[] parts = s.split(":");
if (parts.length != 2) {
throw new IllegalArgumentException("String format must be '<num>:<num>'");
}
try {
return new TwoNumbers(Integer.parseInt(parts[0]), Integer.parseInt(parts[0]));
} catch (NumberFormatException e) {
throw new IllegalArgumentException("parts must be numeric!", e);
}
}

public int getNum1() {
return num1;
}

public int getNum2() {
return num2;
}

@Override
public int compareTo(TwoNumbers o) {
if (o == null) {
return 1;
}
int diff = Integer.compare(o.num1, this.num1);
if (diff == 0) {
diff = Integer.compare(o.num2, this.num2);
}
return diff;
}
}

compareTo 方法作为 the Comparable interface 的实现存在。 : 它定义了这种类型的对象是如何排序的。

我使用了 final 字段(并且不提供 setter),因为该类实现了 immutable objects .

这样您就可以直接对您的数据进行排序,而无需额外的比较器,并且不需要在您的程序中分布所有“拆分和解析”代码。相反,您有一个单个类负责处理该特定格式,所有其他代码片段都可以使用它。

关于java - 如何对包含数字的字符串集合进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7818064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com