PaP*_*nG0 2 java sorting comparator
我是比较器概念的新手,我正在研究对字符串进行排序的方法。在下面的代码中,我列出了一个列表,并使用Collections.sort()
方法对其进行了排序。这是代码:
public class ComparatorTest {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
List<String> list = new ArrayList<String>();
list.addAll(Arrays.asList("Bob Stone", "Jordan Brand", "Bob Mass", "Dylan Walsh","Tom Mavis","Bob Ganley"));
System.out.println("Before sort "+ list);
Collections.sort(list);
System.out.println("After sort "+ list);
}
}
Run Code Online (Sandbox Code Playgroud)
如何修改此字符串以使用给定的String进行排序,而不只是按字母顺序排序?例如,如果我输入字符串,BOB
则所有BOB都将移至列表的开头。之前我确实问过排序问题,但是我误解了排序的概念,而更多地是一个过滤问题(java按用户输入的字符串值对字符串进行排序的列表)。这个问题与之前的问题有所不同,因为现在我正在尝试对字符串进行排序和重新排列,而不是对其进行过滤。
您可以使用该Boolean.compare
方法检查字符串是否以“ Bob”开头:
Comparator<String> bobsFirst = (a, b) -> Boolean.compare(b.startsWith("Bob"), a.startsWith("Bob"));
Run Code Online (Sandbox Code Playgroud)
这样比较它们(首先是b,然后是a),则首先将“ Bob”开头。
然后,使用自然顺序打破平局:
Comparator<String> comparator = bobsFirst.thenComparing(a -> a);
Run Code Online (Sandbox Code Playgroud)
请注意,这startsWith
是区分大小写的。要忽略“鲍勃”的情况,您可以将替换为b.startsWith("Bob")
(类似于a
):
b.regionMatches(true, 0, "Bob", 0, 3)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
73 次 |
最近记录: |