如何通过Stream API按指定优先级规则对Person数组排序?
解决Java Stream按自定义优先级排序的问题
你可以通过自定义Comparator来实现需求中的排序规则,以下是两种可行的实现方式:
方式一:显式比较逻辑
直接在sorted方法中传入Lambda表达式,明确处理不同优先级的比较逻辑:
Arrays.stream(arr_Person) .sorted((a, b) -> { // 优先排列priority=0的元素 if (a.getPriority() == 0 && b.getPriority() != 0) { return -1; } else if (a.getPriority() != 0 && b.getPriority() == 0) { return 1; } // 非0元素按priority降序排列 return Integer.compare(b.getPriority(), a.getPriority()); }) .collect(Collectors.toList());
方式二:映射排序键(更简洁)
通过将priority映射为自定义排序键,利用默认的升序排序实现需求:
Arrays.stream(arr_Person) .sorted(Comparator.comparingInt(p -> p.getPriority() == 0 ? 0 : 5 - p.getPriority() )) .collect(Collectors.toList());
逻辑说明:
- 对于
priority=0的元素,映射为排序键0,确保排在最前面 - 对于
priority=4的元素,映射为5-4=1;priority=3映射为2,以此类推,升序排序时就会呈现4→3→2→1的顺序
注意:代码中假设Person类提供了getPriority()方法用于获取priority字段,如果该字段是public修饰的,直接替换为p.priority即可。
内容的提问来源于stack exchange,提问作者user18240702
相关产品推荐
相关产品推荐

