私はTestというクラスを持っています。このクラスには、int値を返すgetNumberというメソッドがあります。Mapのストリームを使用して最大値を取得
public class Test{
.
.
.
.
public int getNumber(){
return number;
}
}
また、キーがLongで値がTestオブジェクトであるHashMapがあります。
Map<Long, Test> map = new HashMap<Long, Test>();
ストリームラインコードを使用してキーを印刷し、最大getNumberを持つgetNumberも印刷したいとします。
私の質問は、私は最大量のキーを返すことができる方法であるしかし、私はライン
以下final Comparator<Test> comp = (p1, p2) -> Integer.compare(p1.getNumber(), p2.getNumber());
map.entrySet().stream().map(m -> m.getValue())
.max(comp).ifPresent(d -> System.out.println(d.getNumber()));
を経由して最大数を印刷することができますか?ストリームを使って1ラウンドでやってもいいですか?
それは魅力のように機能します。ありがとうございました –
高価な '.sorted(...).findFirst()'に変える理由はありません。 OPのコードのように 'max'を使用することができますが、唯一の方法は' map'ステップを実行しないことです: 'map.entrySet().stream().max(Map.Entry.comparingByValue(Comparator.comparingInt(Test :: getNumber)))).get() ' – Holger
@Holgerもう一度、間違って編集しました – Eugene