Java8 流:groupingBy 并创建 Map
Java8 Stream: groupingBy and create Map
我想获取以下数据结构:Map>
给定的是一个 class 要么包含原始字段(位置、目的地、距离),要么作为键(位置)加上地图(目标)。从每个独特的位置可以定位到许多目的地(按距离)。
private static class LocationPair {
String position, destination;
int distance;
}
Map<String, Map<String, Integer>> locations = locationPairs.stream()
.collect(Collectors.groupingBy(pair -> pair.position, Collectors.toMap(pair.destination, pair.distance)));
private static class LocationPair {
String position;
Map<String, Integer> target = Collections.singletonMap(destination, distance);
}
Map<String, Map<String, Integer>> locations = locationPairs.stream()
.collect(Collectors.groupingBy(pair -> pair.position, Collectors.mapping(pair -> pair.target)));
关于第二个代码片段:结果应该与第一个相同 code.The 唯一不同的是,LocationPair 中提供的数据已经过进一步处理,因此已经放置了目的地和距离进入他们的目标地图。
我知道这一定是可能的,但不知何故我不知道如何完成它。上面的流代码片段应该显示我的意思,尽管我知道它们不起作用。
非常感谢您的帮助
代码大部分看起来是正确的。微小的调整使其正常工作。
public static Map<String, Map<String, Integer>> locations(List<LocationPair> locationPairs) {
return locationPairs.stream()
.collect(
Collectors.groupingBy(LocationPair::getPosition, Collectors.toMap(LocationPair::getDestination, LocationPair::getDistance)));
}
使用变量而不是方法引用,这就变成了-
locationPairs.stream()
.collect(
Collectors.groupingBy(tmp -> tmp.position, Collectors.toMap(tmp2 -> tmp2.destination, tmp2 -> tmp2.distance)));
希望这对您有所帮助。如果我遗漏了什么请告诉我
我想获取以下数据结构:Map
给定的是一个 class 要么包含原始字段(位置、目的地、距离),要么作为键(位置)加上地图(目标)。从每个独特的位置可以定位到许多目的地(按距离)。
private static class LocationPair {
String position, destination;
int distance;
}
Map<String, Map<String, Integer>> locations = locationPairs.stream()
.collect(Collectors.groupingBy(pair -> pair.position, Collectors.toMap(pair.destination, pair.distance)));
private static class LocationPair {
String position;
Map<String, Integer> target = Collections.singletonMap(destination, distance);
}
Map<String, Map<String, Integer>> locations = locationPairs.stream()
.collect(Collectors.groupingBy(pair -> pair.position, Collectors.mapping(pair -> pair.target)));
关于第二个代码片段:结果应该与第一个相同 code.The 唯一不同的是,LocationPair 中提供的数据已经过进一步处理,因此已经放置了目的地和距离进入他们的目标地图。
我知道这一定是可能的,但不知何故我不知道如何完成它。上面的流代码片段应该显示我的意思,尽管我知道它们不起作用。
非常感谢您的帮助
代码大部分看起来是正确的。微小的调整使其正常工作。
public static Map<String, Map<String, Integer>> locations(List<LocationPair> locationPairs) {
return locationPairs.stream()
.collect(
Collectors.groupingBy(LocationPair::getPosition, Collectors.toMap(LocationPair::getDestination, LocationPair::getDistance)));
}
使用变量而不是方法引用,这就变成了-
locationPairs.stream()
.collect(
Collectors.groupingBy(tmp -> tmp.position, Collectors.toMap(tmp2 -> tmp2.destination, tmp2 -> tmp2.distance)));
希望这对您有所帮助。如果我遗漏了什么请告诉我