2017-08-01 8 views
6

मैं जावा पर कार्यात्मक प्रोग्रामिंग में पाने के लिए कोशिश कर रहा हूँ से औसत आयु प्राप्त 8जावा 8 धारा, देश

उपयोगकर्ता वर्ग

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>। मैं इसे उपयोगकर्ता सूची को पुन: स्थापित करके पुराना तरीका कर सकता हूं। हालांकि मैं इसे stream के साथ functional तरीके से कार्यान्वित करना चाहता हूं। मुझे collect और groupingBy के बारे में पता है।

मैंने users.stream().collect(Collectors.groupingBy(user -> user.getCountry())); की कोशिश की और Map<String, List<User>> प्राप्त किया। औसत भाग कैसे करें इसे समझ नहीं सकते।

+3

एक नज़र यहाँ 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))); 
संबंधित मुद्दे