Java stream中reduce和collect操作

137 阅读1分钟

代码快速查阅

public static void main(String[] args) {
    // 收集相同性别的员工姓名(每一个类都是一个集合)
    System.out.println(
        generatePerson().
            collect(
                Collectors.groupingBy(Person::getGender,
                                      Collectors.mapping(Person::getName, Collectors.toList()))));

    // 合并相同性别的员工年龄(每一类都是一个值)
    System.out.println(
        generatePerson()
            .collect(
                Collectors.groupingBy(Person::getGender,
                                      Collectors.reducing(0, Person::getAge, Integer::sum))));
}                         

public static Stream<Person> generatePerson() {
    return Stream.of(new Person("A", Sex.FEMALE, 10), new Person("B", Sex.FEMALE, 20),
                     new Person("C", Sex.MALE, 20), new Person("D", Sex.MALE, 30),
                     new Person("E", Sex.FEMALE, 30));
}

Person类

/**
 * @author shan qi
 */
@Data
@NoArgsConstructor
public class Person {

    String name;
    LocalDate birthday;
    Sex gender;
    String emailAddress;
    Integer age;

    public Person(String name, Sex gender, Integer age) {
        this.name = name;
        this.gender = gender;
        this.age = age;
    }
}

enum Sex {
    /**
     * 男
     */
    MALE,
    /**
     * 女
     */
    FEMALE
}