java-使用流查找最高的唯一值
作者:互联网
假设我有一个简单的Car对象:
class Car {
String id;
String model;
Integer price;
}
现在,我列出了一些可能如下所示的汽车:
{ Car(1, Commodore, 55000), Car(2, F150, 120000), Car(3, F150, 130000),
Car(4, Camry, 50000), Car(5,Commodore,50000)}
我想从列表中过滤掉任何重复的模型,以确保我只保留每个重复模型中价格最昂贵的汽车,例如:
{ Car(1, Commodore, 55000), Car(3, F150, 130000), Car(4, Camry, 50000) }
我相信我可以使用Streams API做到这一点,但我只是在努力将正确的调用链接在一起.
在我的脑海中,我想像一下伪代码是这样的:
>收集所有汽车,按型号分组
>在每个模型的列表上使用Collectors.maxBy()获得最昂贵的价格
>将生成的单项清单再次合并到全球汽车清单中
试图将它们缝合在一起有点混乱-有什么想法吗?
解决方法:
您可以按模型创建最大价值汽车的地图:
List<Car> cars = new ArrayList<> ();
Map<String,Optional<Car>> maxCarByModel =
cars.stream ()
.collect (Collectors.groupingBy (c -> c.model,
Collectors.maxBy (Comparator.comparing (c->c.price))));
标签:java-stream,java 来源: https://codeday.me/bug/20191111/2018248.html