编程语言
首页 > 编程语言> > java-按属性查找最小值,以列表形式返回

java-按属性查找最小值,以列表形式返回

作者:互联网

我有一个与此类似的课程:

public class Product{
    public Integer category;
    public Integer price;    

    // getters and setters omitted
}

对于不同类别和价格的产品列表,我想返回一个包含每个类别最便宜产品的列表.我找到了一种以类别为键的地图形式获取地图的方法,但我只想列出一个清单.一种简洁易读的方法是什么?

到目前为止,这是给我的地图:

Map<String, Product> cheapestProducts = products.stream()
   .collect(
       groupingBy(                                                      
           Product::getCategory,
               collectingAndThen(minBy(comparing(Product::getPrice)), p -> p.get())
       )
   );

解决方法:

您可以使用toMap方法,然后调用map.values():

Collection<Product> cheapestProducts = products
            .stream()
            .collect(Collectors.toMap(t -> t.category, u -> u,
                    (a, b) -> a.price > b.price ? b : a))
            .values();

如果您确实需要列表,还请参见上面的Holger评论.

标签:java-8,java-stream,java,lambda
来源: https://codeday.me/bug/20191118/2030988.html