列表映射:对列表的所有值求和 class
Map of List: Sum all the values of the list class
我有这个class
public Car(Colour colour, int passengers) {
this.colour = colour;
this.passengers = passengers;
}
其中 Color 是一个枚举:
public enum Colour {
RED, YELLOW, GREEN, BLACK, WHITE, BLUE, GREY
}
我创建了这张地图:
Map<Colour, List<Car>> colourListMap = new HashMap<>();
假设我们填充列表映射:
Car yellowCar = new Car(Colour.YELLOW, 4);
Car blueCar = new Car(Colour.BLUE, 1);
Car blackCar = new Car(Colour.BLACK, 3);
Map<Colour, List<Car>> map = carMemory.addCarByColour(yellowCar);
carMemory.addCarByColour(blueCar);
carMemory.addCarByColour(blackCar);
还有 2 个相同颜色的实例:
Car redCar = new Car(Colour.RED, 2);
Car redCar2 = new Car(Colour.RED, 6);
Map<Colour, List<Car>> map = carMemory.addCarByColour(redCar);
carMemory.addCarByColour(redCar2);
有没有一种简单的方法可以对 Car class 中的所有乘客求和?而不是通过颜色调用键?我想 Java 8 Stream...但我不是很自信。
我知道这是不正确的。
int size = map.values()
.stream()
.mapToInt(Collection::size)
.sum();
如果您需要地图中所有汽车的所有乘客的总和:
map.values()
.stream()
.flatMap(List::stream) // Stream of car objects
.mapToInt(Car::getPassengers)
.sum();
过滤颜色的示例:
map.entrySet()
.stream()
.filter(entry -> entry.getKey() == Colour.RED ||
entry.getKey() == Colour.BLACK) // only entries for BLACK and RED will remain
.map(Map.Entry::getValue) // Stream<List<Car>>
.flatMap(List::stream) // Stream<Car>
.mapToInt(Car::getPassengers)
.sum();
旁注:
- 对于具有 enum-keys 的 Map 使用 EnumMap 而不是
HashMap
,此 special-purpose 实现旨在仅与枚举一起使用并且具有更好的性能。
我有这个class
public Car(Colour colour, int passengers) {
this.colour = colour;
this.passengers = passengers;
}
其中 Color 是一个枚举:
public enum Colour {
RED, YELLOW, GREEN, BLACK, WHITE, BLUE, GREY
}
我创建了这张地图:
Map<Colour, List<Car>> colourListMap = new HashMap<>();
假设我们填充列表映射:
Car yellowCar = new Car(Colour.YELLOW, 4);
Car blueCar = new Car(Colour.BLUE, 1);
Car blackCar = new Car(Colour.BLACK, 3);
Map<Colour, List<Car>> map = carMemory.addCarByColour(yellowCar);
carMemory.addCarByColour(blueCar);
carMemory.addCarByColour(blackCar);
还有 2 个相同颜色的实例:
Car redCar = new Car(Colour.RED, 2);
Car redCar2 = new Car(Colour.RED, 6);
Map<Colour, List<Car>> map = carMemory.addCarByColour(redCar);
carMemory.addCarByColour(redCar2);
有没有一种简单的方法可以对 Car class 中的所有乘客求和?而不是通过颜色调用键?我想 Java 8 Stream...但我不是很自信。
我知道这是不正确的。
int size = map.values()
.stream()
.mapToInt(Collection::size)
.sum();
如果您需要地图中所有汽车的所有乘客的总和:
map.values()
.stream()
.flatMap(List::stream) // Stream of car objects
.mapToInt(Car::getPassengers)
.sum();
过滤颜色的示例:
map.entrySet()
.stream()
.filter(entry -> entry.getKey() == Colour.RED ||
entry.getKey() == Colour.BLACK) // only entries for BLACK and RED will remain
.map(Map.Entry::getValue) // Stream<List<Car>>
.flatMap(List::stream) // Stream<Car>
.mapToInt(Car::getPassengers)
.sum();
旁注:
- 对于具有 enum-keys 的 Map 使用 EnumMap 而不是
HashMap
,此 special-purpose 实现旨在仅与枚举一起使用并且具有更好的性能。