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