【发布时间】:2019-12-06 19:44:20
【问题描述】:
我正在尝试创建一个函数来过滤一个映射,该映射包含一个字符串作为键和一个飞行对象列表作为值并返回一个字符串列表。该地图表示飞行路径,任务是找到从起点到目的地的最短路径。 航班类别有两个字段,起点和目的地。因此,如果我发送纽约的维也纳,我应该得到一个包含 fligth1 和 flight2 的列表。 该函数接受两个参数(字符串来源,字符串目的地)
地图中的键代表一个城市,而值是航班到达的位置,如下所示:
Map<String, List<Flight>> paths = new HashMap<>();
List<Flight> flightsToBerlin = new ArrayList<>();
List<Flight> flightsToVienna = new ArrayList<>();
Flight flight1 = new Flight("Vienna", "Berlin");
Flight flight2 = new Flight("Berlin", "New York");
flightsToBerlin.add(flight1);
flightsToVienna.add(flight2);
paths.put("Vienna", flightsToVienna);
paths.put("Berlin", flightsToBerlin);
诀窍是要求它在一行中完成。这就是让我发疯的部分。我曾尝试使用流,但在过滤地图并找到目的地后我有点困惑,如下所示:
public List<Flight> findPath(String origin, String destination) {
return (List<Flight>) this.paths.entrySet().stream()
.filter(x -> x.getKey().equals(destination))..
}
我该如何从这里开始?
【问题讨论】:
-
如果没有这样的值,如何找到最短路径?
-
更新了问题,希望现在更清楚了。
-
欢迎来到 SO!最短路径需要使用队列和集合来避免循环的 BFS 之类的东西。我不确定这应该如何在一行中完成......你确定这是可能的吗?
-
你想在一行中完成什么?最短路径的完整列表?这是不可能的。
-
谢谢!该任务明确表示,在一行中完成它会奖励加分。所以我认为是的。