龙空技术网

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

码农看看 58

前言:

现时你们对“字符串的数字排序”都比较关怀,同学们都需要分析一些“字符串的数字排序”的相关内容。那么小编在网摘上网罗了一些关于“字符串的数字排序””的相关内容,希望朋友们能喜欢,各位老铁们快快来了解一下吧!

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<String> {  @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<String>() { @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 。

标签: #字符串的数字排序 #字符串数字怎么排序 #字符串数字怎么排序的