首页 > 解决方案 > Java 中的联合流

问题描述

我认为这个问题没用,但我找不到如何将这段代码合并到一行

我有活跃的信使列表。我正在尝试在此列表中查找所有免费快递员,然后找到距离最短的快递员

List<Courier> afterCheckIsFree = activeCouriers.stream().filter(Courier::isFree).collect(Collectors.toList());
final Optional<Courier> courierWithMinDistance = afterCheckIsFree.stream()
                .filter(n -> n.getId().equals(CourierFinder.minDistanceUsingCourier(Point.ZERO_POINT, afterCheckIsFree).getId())).findFirst();

非常感谢!

标签: javacollectionslightweight-stream-api

解决方案


更改minDistanceUsingCourier方法以返回单个信使的距离(而不是信使列表的最小距离),然后:

final Optional<Courier> courierWithMinDistance = activeCouriers.stream()
  .filter(Courier::isFree)
  .min(comparing(c -> minDistanceUsingCourier(Point.ZERO_POINT, c)));

推荐阅读