以下の内容はhttps://uga-box.hatenablog.com/entry/2022/10/06/000000より取得しました。


【Java】コレクションの中からBigDecimal型のプロパティが最小であるものを求める

Javaのstreamを使ってコレクションの中から最小値を求めたい

なんとなくminを使えば?と思って以下のようにしてみたが上手くいかなかった

class Product {
    public BigDecimal price;
}

List<Product> products;
products.stream().min((Product) p -> p.price);

javadocをみるとminは引数にComparatorをとる

min(Comparator<? super T> comparator)

なので、Comparator.comparingを使って以下のようにする必要があった

products.stream().min(Comparator.comparing(Product::getPrice));

もし、最小の価格だけが欲しい場合は、BigDecimalがそもそもComparableであるため、.map(Product::getPrice)でpriceのコレクションにした上で以下のようにするでもよい

products
        .stream()
        .map(Product::getPrice)
        .min(Comparator.naturalOrder())

ちなみにOptionalではなくなるが、streamを使わなくてもCollections.minを使ってもできる

Collections.min(products, Comparator.comparing(p -> p.price))



以上の内容はhttps://uga-box.hatenablog.com/entry/2022/10/06/000000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14