java - 如何在java中对集合进行排序以获取顶部/底部的默认值?

标签 java

给定一个字符串列表,有时我们必须对所有项目进行排序,除了少数必须放在顶部或底部的项目之外,

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/

相关文章:

java - 如何从 Joomla 调用外部网络服务

java - 如果连接丢失则注销java

java - 测试 Spring Boot REST API

java - 将数据库内容缓存在内存中以提高性能

Java Rest 发送 double 值

java - Java反射中的构造函数类线程安全

运行 Spring Boot 应用程序时出现 java.lang.NoSuchMethodError

java - 通配符和一个实现两个接口(interface)的类的问题

java - 根据按另一个列表中的值排序的键对映射进行排序

java - Wicket - 进度/多个标签更新