2017-08-01 16 views
6
私は、Javaに、関数型プログラミングに取得しようとしている

で平均年齢を得る8Javaの8ストリームは、国

Userクラス

public class User { 
    private String name; 
    private Country country; 
    private int age; 
    // setters - getters 
} 

国クラス

public class Country { 
    private String name; 
    private int population; 
    //setters - getters 
} 

今、国別の平均年齢を取得したいと思います。基本的にはMap<String, Double>です。ユーザーリストを反復するだけで、私はそれを古い方法で行うことができます。しかし私はfunctionalの方法でそれを実装したいと考えています。streamです。私はcollectgroupingByについて知っています。

users.stream().collect(Collectors.groupingBy(user -> user.getCountry()));を試しましたが、Map<String, List<User>>になりました。平均化の仕方を理解することはできません。

+3

に2つ目のパラメータを追加しますが、ここでhttps://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html#groupingBy-顔をしていますjava.util.function.Function-java.util.stream.Collector- – user902383

答えて

7

groupingBy

Map<String, Double> map = users 
    .stream() 
    .collect(Collectors.groupingBy(
      user -> user.getCountry().getName(), 
      Collectors.averagingInt(User::getAge))); 
関連する問題