どのようにストリームを使用して、指定された属性の最大値を持つすべてのオブジェクトのリストをコンパイルするには?

MWB:

私はのリスト持っていると言うPeopleの属性の名前と年齢とを。どのように私はすべてのインスタンスを取得しますPeopleストリームを使用して、属性の年齢のための最大値を持っていますか?

現在、私は、2段階のアプローチを使用しています:

1)年齢の最大値を見つけます

int maxAge = group
        .stream()
        .mapToInt(person -> person.getAge())
        .max()
        .orElse(-1);

2)のリストの作成Peopleその年齢とを

List<Group> groupWithMaxAge = group
        .stream()
        .filter(person -> person.getAge() == maxAge)
        .collect(Collectors.toList());

何の心配もなく、この作品。しかし、年齢を計算することは、高価な関数であることを場合を考えます。あなたが一度にそれを行うことができれば、その場合には、それはそれではないだろう、いいだろうか?

ルスラン:

またmapFactoryとしてのTreeMapでgroupingByを使用することができます。

List<Group> list = people.stream()
            .collect(groupingBy(Group::getAge, TreeMap::new, toList()))
            .lastEntry()
            .getValue();

おすすめ

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