根据字符串长度对字符串数组进行排序

哥们看看码农2024-07-31 08:13:00  54

1. 概述在本教程中,我们将探讨根据元素的长度对字符串数组进行排序的不同方法。

2.比较器在 Java 中进行排序时,我们经常定义一个Comparator来返回两个参数之间的顺序。排序算法应用Comparator生成的排序顺序并返回排序结果。 定义Comparator时,我们实现以下方法

int compare(T o1, T o2);根据 Java API,如果o1小于o2 ,则此方法必须返回负值;如果两者相等,则返回零;如果o1大于o2 ,则返回正值。

在后面部分的示例中,我们将使用这个未排序的字符串数组来进行说明:

String[] inputArray = new String[] {"am", "today", "too", "I", "busy"};当inputArray按字符串长度排序时,我们期望得到以下数组:

String[] SORTED = new String[] {"I", "am", "too", "busy", "today"};3. 通过自定义比较器进行比较最简单的方法是定义一个自定义字符串比较器,根据字符串长度进行数字比较: public class StringLengthComparator implements Comparator { @Override public int compare(String s1, String s2) {return Integer.compare(s1.length, s2.length);}}

我们将调用Array.sort对数组进行排序。在我们的例子中,我们必须提供第二个参数,即我们的自定义比较器。否则,排序将基于自然顺序:

@Testvoid whenSortByCustomComparator_thenArraySorted { StringLengthComparator comparator = new StringLengthComparator; Arrays.sort(inputArray, comparator);assertThat(inputArray).isEqualTo(SORTED);}根据我们的需要,如果Comparator是一次性使用的,我们可以定义一个匿名类,而不是单独的类:

@Testvoid whenSortByInnerClassComparator_thenArraySorted { Arrays.sort(inputArray, new Comparator { @Override public int compare(String s1, String s2) {return Integer.compare(s1.length, s2.length);}});assertThat(inputArray).isEqualTo(SORTED);}4. Lambda 表达式比较由于 Java 8 引入了lambda 表达式,我们可以通过提供 lambda 表达式而不是使用匿名类来简化以前的方法。lambda是一个可以作为对象传递的匿名函数。 使用 lambda 表达式,我们可以将比较函数作为第二个参数传递给Array.sort,而无需显式定义任何类。这大大提高了代码的可读性:

@Testvoid whenSortedByLambda_thenArraySorted { Arrays.sort(inputArray, (s1, s2) -> Integer.compare(s1.length, s2.length));assertThat(inputArray).isEqualTo(SORTED);}这个例子和上一节做的一样。只是当我们用 lambda 表达式来定义它时会更简洁。

5. 通过比较函数进行比较Java 8 还在Comparator类中引入了方便的比较静态函数。 Comparator.comparingInt是我们可以在这里采用的。此静态函数接受返回整数的方法引用。对于以下示例,我们将应用String::length作为获取字符串长度的方法引用:

@Testvoid whenSortedByComparingInt_thenArraySorted { Arrays.sort(inputArray, Comparator.comparingInt(String::length));assertThat(inputArray).isEqualTo(SORTED);}再次,这与前一个功能相同,但语法更加简化。

六,结论在本文中,我们探讨了不同的排序方法。它基于为Array.sort提供一个专用的比较器,该比较器根据字符串数组的长度对其进行排序。 可以从自定义Comparator类、lambda 表达式或比较函数创建Comparator 。

转载此文是出于传递更多信息目的。若来源标注错误或侵犯了您的合法权益,请与本站联系,我们将及时更正、删除、谢谢。
https://www.414w.com/read/988374.html
0
最新回复(0)