2016-06-25 11 views
1

私はクラスPersonを持っています。これは各人のコードと友人のリストを格納しています。私は、友人数が最も多い人のコードを取得しようとしていますが、それを理解することはできません。 getFriendsおよびgetCodeのメソッドは、Personクラスによって提供されています。Javaストリームからの文字列を返します

ストリームから文字列を返すにはどうすればよいですか?

HashMap<String,Person> persons = new HashMap<>(); 

public String personWithLargestNumberOfFriends() { 
    return persons.values().stream() 
     .sorted(comparing(p -> ((Person)p).getFriends().size()).reversed()) 
     .limit(1) 
     .forEach(p -> ((Person)p).getCode()); 
} 
+0

ストリームで何をしたいのかにかかわらず、forEachの存在を忘れるとすぐに、解決策が発生します... – Holger

答えて

6

並べ替えの代わりに、max()を使用してください。

return persons.values().stream() 
    .max(comparing(Person::getFriends, comparingInt(List::size))) 
    .map(Person::getCode) 
    .orElse("empty code"); 

他のいくつかのゲッターはorElseThrow()のように、あなたのニーズに合うかどうかを確認するためにOptionalクラスを参照してください。

関連する問題