You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据对象的布尔属性处理Java Stream 实现可运行车辆优先排序

实现方案

你可以通过以下两种方式实现需求:

方案1:自定义比较器排序

如果后续还要叠加其他排序规则(如按车牌号、车龄排序),可以用sorted()方法自定义排序逻辑:

import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

// 排序后正常运行的车辆排在前列
List<Car> sortedCars = cars.stream()
    // 按isWorking倒序,true会排在false前面
    .sorted(Comparator.comparing(Car::isWorking, Comparator.reverseOrder()))
    .collect(Collectors.toList());

System.out.println("Working Cars First" + sortedCars);

方案2:拼接两个过滤结果(性能更高,保留原顺序)

如果只需要区分正常/故障两类,同分组内保留原列表的顺序,且不需要额外排序规则,推荐用该方案,时间复杂度为O(n),比排序的O(nlogn)性能更高:

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

List<Car> sortedCars = Stream.concat(
    // 先拼接所有正常运行的车辆
    cars.stream().filter(Car::isWorking),
    // 后拼接所有无法正常运行的车辆
    cars.stream().filter(car -> !car.isWorking())
).collect(Collectors.toList());

System.out.println("Working Cars First" + sortedCars);

注意

你原有代码的问题是filter操作后的结果没有赋值给变量,直接打印的car并不是筛选后的结果,需要把流操作的返回值赋值给新的列表变量再使用。

内容的提问来源于stack exchange,提问作者Traps HD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 17:45:03