【发布时间】:2019-01-11 10:06:53
【问题描述】:
鉴于:
我有List<List<Integer>> locations,这是一个位置的坐标。例如,地点 A:(2,4),地点 B:(5,4),地点 C:(10,9),地点 D:(2,4)。所以我的locations 将包含列表列表。 我无法更改此格式。
前往特定位置的成本是坐标总和的平方根。所以去的代价是Place A = Math.sqrt(2 + 4),去的代价是Place B = Math.sqrt(5 + 4)等等。
输出:我想要得到的是所有位置中“成本最低”的列表。退货要求为List<List<Integer>> nearestLocations。我所做的是我正在尝试创建一个TreeMap<Double, List<List<Integer>>
问题我的问题是如何使用 Java 8 流转换下面的转换?
List<List<Integer>> findNearestLocation(int total, List<List<Integer>> allLocations, int size) {
ArrayList<List<Integer>> results = new ArrayList<>();
TreeMap<Double, List<Integer>> map = new TreeMap<>();
for (int i = 0; i < total && i < allLocations.size(); i++) {
List<Integer> list = allLocations.get(i);
double l = 0.0;
for (Integer x : list) {
l += x * x;
}
map.put(Math.sqrt(l), list);
}
if (map.size() > 0) {
for (int get = 0; get < size; get++) {
results.add(map.get(map.firstKey()));
map.remove(map.firstKey());
}
}
return results;
}
【问题讨论】:
-
您的解决方案似乎计算了一个映射,其中键是实际成本,而您似乎希望能够通过
place进行查找。另外,在您的初始List<List<Integer>> locations输入中定义的“地点”在哪里?外部列表中的索引? -
“地点”只是输入以这种方式构造的伪含义。它实际上只是一个
List<List<Integer>> locations。没有 Place 对象。 @ernest_k -
“我可以通过多个 for each 的多次迭代来做到这一点” - 您如何发布该代码,以便我们更容易理解您到底在寻找什么?
-
@daniu 我已经添加了手动迭代
-
等等,你只想按元素的平方根对列表进行排序?
标签: java algorithm java-8 java-stream treemap