一覧からオブジェクトの複数の属性を取得する方法 - Javaの8?

サンバ:

私はAPIを配置し、最低価格で場所を見つけることにしましたGoogleが返された場所のリストを持っています。

ここで私は、Java 8でそれを実装する方法です。

BigDecimal lowestPrice = places.stream()
                .collect(Collectors.groupingBy(Place::getPrice, Collectors.counting()))
                .entrySet().stream().min(Map.Entry.comparingByValue())
                .map(Map.Entry::getKey)
                .orElse(BigDecimal.ZERO); 

それは私に最低価格を返しますが、(それが持っているだけでなく場所の名前を取得するために素晴らしいことでしょうname属性)。

どのようにしても返すことができname最低価格で場所のか?

Ousmane D .:

第一に、それはあなたが最初のよう望むものを本当には不明ですが、あなたはそれを言っているように見えます

私はAPIを配置して決めたGoogleが返された場所のリスト持っ最低価格で場所を見つけることを

その後、あなたの説明の下部にある、あなたはそれを言います:

それは私に最低価格を返しますが、同様に場所の名前を取得するために素晴らしいことでしょう(それはname属性を持っています)。

後者は、あなたが望むもののようだかのように?

それにもかかわらず、ここで両方のソリューションは、以下のとおりです。

あなたがかもしれ何らかの理由でグループ分けした後、カウントによって最小値を検索したい場合は...その後、あなたの線に沿って何かをすることができます:

 places.stream()
       .collect(Collectors.groupingBy(Place::getPrice))
       .entrySet().stream()
       .min(Comparator.comparingInt((Map.Entry<Integer, List<Place>> e) -> e.getValue().size()))
       .map(e -> new SimpleEntry<>(e.getKey(), e.get(0)));  

私が使用した上記のことに注意してIntegerエントリキーとして、それはない場合、適切な型に変更して自由に感じますInteger


そうでなければ、あなたは、単にあなたが行うことができます最低の価格を持つオブジェクト後にしている場合:

places.stream().min(Comparator.comparingInt(Place::getPrice));

または:

Collections.min(places, Comparator.comparingInt(Place::getPrice));

グループ化し、すべてのものが上に行くために必要はありません。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=196048&siteId=1