Java 8 Gruppierung mit benutzerdefinierten Sammler?

Habe ich die folgende Klasse.

class Person {

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

    public int getAge() {
        return birthday.until(IsoChronology.INSTANCE.dateNow()).getYears();
    }

    public String getName() {
        return name;
    }
}

Ich würde gerne in der Lage, die Gruppe nach Alter und sammeln Sie dann die Liste der Personen, Namen, anstatt die Person Liefergegenstand selbst entstanden sind; alle in einem einzigen schönen lamba-Ausdruck.

Zur Vereinfachung alles ich bin Verlinkung meiner aktuellen Lösung zu speichern, dass das Ergebnis der Gruppierung nach Alter und iteriert dann über Sie sammeln die Namen.

ArrayList<OtherPerson> members = new ArrayList<>();

members.add(new OtherPerson("Fred", IsoChronology.INSTANCE.date(1980, 6, 20), OtherPerson.Sex.MALE, "[email protected]"));
members.add(new OtherPerson("Jane", IsoChronology.INSTANCE.date(1990, 7, 15), OtherPerson.Sex.FEMALE, "[email protected]"));
members.add(new OtherPerson("Mark", IsoChronology.INSTANCE.date(1990, 7, 15), OtherPerson.Sex.MALE, "[email protected]"));
members.add(new OtherPerson("George", IsoChronology.INSTANCE.date(1991, 8, 13), OtherPerson.Sex.MALE, "[email protected]"));
members.add(new OtherPerson("Bob", IsoChronology.INSTANCE.date(2000, 9, 12), OtherPerson.Sex.MALE, "[email protected]"));

Map<Integer, List<Person>> collect = members.stream().collect(groupingBy(Person::getAge));

Map<Integer, List<String>> result = new HashMap<>();

collect.keySet().forEach(key -> {
            result.put(key, collect.get(key).stream().map(Person::getName).collect(toList()));
});

Aktuelle Lösung

Nicht ideal, und für den Willen zu lernen, ich würde gerne eine mehr elegante und leistungsstarke Lösung.

InformationsquelleAutor lcardito | 2015-10-26

Schreibe einen Kommentar