给定一个字符串列表,有时我们必须对所有项目进行排序,除了少数必须放在顶部或底部的项目之外,
List<String> profiles = Arrays.asList(new String[] {
"Y-Profile", "X-Profile", "Default", "A-Profile", "B-Profile"
});
List<String> sortedProfiles = profiles.stream().sorted((o1, o2)->o1.compareTo(o2)).
collect(Collectors.toList());
当前输出与默认字符串比较如下,
sortedProfiles ==> [A-Profile, B-Profile, Default, X-Profile, Y-Profile]
所需的输出如下,在java中执行此操作的乐观方法是什么,而无需太多迭代或过滤,因为列表大小是动态的,并且可能会在一段时间内变大
sortedProfiles ==> [Default, A-Profile, B-Profile, X-Profile, Y-Profile]
最佳答案
您需要实现一个比简单的o1.compareTo(o2)
更智能的比较器。您最终可能会得到这样的结果(但不一定是最有效的):
final String defaultVal = "Default";
List<String> sortedProfiles = profiles.stream().sorted(
(o1, o2) -> defaultVal.equals(o1) && defaultVal.equals(o2)
? 0
: (defaultVal .equals(o1)
? -1
: (defaultVal .equals(o2) ? 1 : o1.compareTo(o2)))
).collect(Collectors.toList());
关于java - 如何在java中对集合进行排序以获取顶部/底部的默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55532146/