代码
@Slf4j
@Data
@AllArgsConstructor
public class Motor {
private String type;
private String brand;
private Integer price;
public static void main(String[] args) {
List<Motor> motors = Arrays.asList(
new Motor("H2", "kawasaki", 23),
new Motor("Ninja400", "kawasaki", 5),
new Motor("Ninja250", "kawasaki", 4),
new Motor("RS1200GS DAV", "BWM", 23),
new Motor("NK250", "CF", 2),
new Motor("GSX250", "SUZUKI", 3),
new Motor("DL250", "SUZUKI", 3)
);
Map<String, List<Motor>> motorMap =motors.stream().collect(Collectors.groupingBy(Motor::getBrand));
log.info("motorMap: {}", motorMap);
Map<String, List<String>> typeMap =motors.stream().collect(Collectors.groupingBy(Motor::getBrand,Collectors.mapping(Motor::getType, Collectors.toList())));
log.info("typeMap: {}", typeMap);
Map<String, Long> countMap = motors.stream().collect(Collectors.groupingBy(Motor::getBrand, Collectors.counting()));
log.info("countMap: {}", countMap);
countMap.entrySet().stream().sorted(Map.Entry.<String, Long>comparingByValue().reversed()).forEachOrdered(System.out::println);
Map<String, Integer> sumMap = motors.stream().collect(Collectors.groupingBy(Motor::getBrand, Collectors.summingInt(Motor::getPrice)));
log.info("sumMap: {}", sumMap);
}
}
运行结果
motorMap: {SUZUKI=[Motor(type=GSX250, brand=SUZUKI, price=3), Motor(type=DL250, brand=SUZUKI, price=3)], CF=[Motor(type=NK250, brand=CF, price=2)], BWM=[Motor(type=RS1200GS DAV, brand=BWM, price=23)], kawasaki=[Motor(type=H2, brand=kawasaki, price=23), Motor(type=Ninja400, brand=kawasaki, price=5), Motor(type=Ninja250, brand=kawasaki, price=4)]}
typeMap: {SUZUKI=[GSX250, DL250], CF=[NK250], BWM=[RS1200GS DAV], kawasaki=[H2, Ninja400, Ninja250]}
countMap: {SUZUKI=2, CF=1, BWM=1, kawasaki=3}
kawasaki=3
SUZUKI=2
CF=1
BWM=1
sumMap: {SUZUKI=6, CF=2, BWM=23, kawasaki=32}