我已经知道我们可以对字符串数组进行数字排序,方法是将它们转换为整数数组,然后使用Arrays.sort()或使用任何比较器。

所以我的问题是,如果这些字符串超出整数或long int的限制,那么我们如何对它们进行排序。例如,考虑以下字符串数组:

14829435897932384626433832795
4159265358979323846264338327
1937286535897932384626433832795296523
23746289


在这些情况下,传统的比较器或任何排序方法将无法工作,因为它们依次使用整数(或任何其他数据类型)。

最佳答案

您可以使用Arrays.sort(array, comparator)

Arrays.sort(array, Comparator.comparing(BigInteger::new));



comparator可以将parameter一个对象当作另一个对象(在这里为maps a function)作为String into BigInteger


详细信息(从短到长,Intellij会建议您使用第一个)::

= Comparator.comparing(BigInteger::new)
= Comparator.comparing(val -> new BigInteger(val))
= Comparator.comparing((o1, o2) -> new BigInteger(o1).compareTo(new BigInteger(o2)))




String[] array = new String[]{"14829435897932384626433832795",
                              "4159265358979323846264338327",
                              "1937286535897932384626433832795296523", "23746289"};
Arrays.sort(array, Comparator.comparing(BigInteger::new));
System.out.println(Arrays.toString(array));

//Will result in
[23746289, 4159265358979323846264338327, 14829435897932384626433832795, 1937286535897932384626433832795296523]

关于java - 对字符串数组进行数字排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47287556/

10-14 14:49
查看更多