java - Java 按所需字符串排序
问题描述
我对比较器的想法很陌生,我正在研究对字符串进行排序的方法。在下面的代码中,我制作了一个列表并使用该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);
}
}
如何修改它以使用给定的字符串进行排序,而不是仅按字母顺序排序?例如,如果我给出字符串,BOB
那么所有的 BOB 都会移到列表的前面。我之前确实问过一个排序问题,但我误解了排序的想法,它更像是一个过滤问题(java sort list of strings by string value by a user enters)。这个问题与我之前的问题不同,因为现在我正在尝试对字符串进行实际排序和重新排列,而不是过滤它们。
解决方案
您可以使用该Boolean.compare
方法检查字符串是否以“Bob”开头:
Comparator<String> bobsFirst = (a, b) -> Boolean.compare(b.startsWith("Bob"), a.startsWith("Bob"));
以这种方式比较它们(首先是b,然后是a)首先将事物以“Bob”开头。
然后,使用自然顺序进行平局:
Comparator<String> comparator = bobsFirst.thenComparing(a -> a);
请注意,startsWith
区分大小写。要忽略“Bob”的情况,您可以将b.startsWith("Bob")
(类似地a
)替换为:
b.regionMatches(true, 0, "Bob", 0, 3)
推荐阅读
- compiler-errors - 在模块中找不到 (1) 中引用的非法预处理器指令和符号
- docker - 创建预填充的 docker 映像
- cjson - cJSON 建立一个数组?
- php - How to insert all textview and edittext fields into same columns in database mysql in Android Studio
- html - VBA对网站检查元素的HTML解析
- ios - 后台快速计时器
- java - 如何跨 java 桌面和 android 应用程序连接两个 sqlite 数据库?
- java - 如何在spring boot中找到hibernate orm或hibernate ogm用于连接我的mongodb服务器
- angular - 如何查看除特定控件之外的所有 FormControls ValueChanges?
- html - 选中网页上的复选框