编程语言
首页 > 编程语言> > java-使用流查找最高的唯一值

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