Группировка на основе предпочтений продолжает возвращать нулевое значение - PullRequest
0 голосов
/ 02 мая 2020
public class HomeroomMix {


    public void calculate(String className, int number) {
        List<PeopleClass> people = Arrays.asList(
                new PeopleClass("DE", "male"),
                new PeopleClass("DE", "female"),
                new PeopleClass("DE", "n/a"),
                new PeopleClass("UK", "female"),
                new PeopleClass("UK", "female"),
                new PeopleClass("UK", "female"),
                new PeopleClass("JP", "trans"),
                new PeopleClass("JP", "male")
        );


        int number_of_groups = number;

        Function<PeopleClass, String> discriminator = PeopleClass::getGender;

        AtomicInteger index = new AtomicInteger();
        List<List<PeopleClass>> groups = new ArrayList<>(people.stream()
                .sorted(Comparator.comparing(discriminator))
                .collect(Collectors.groupingBy(e -> index.getAndIncrement() % number_of_groups))
                .values());

        groups.forEach(System.out::println);
    }

это мой класс людей

 public PeopleClass(String nationality, String gender) {
        this.gender = gender;
        this.nationality = nationality;
    }

    public String getNationality() {
        return nationality;
    }

    public void setNationality(String nationality) {
        this.nationality = nationality;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getHomeRoom() {
        return homeRoom;
    }

    public void setHomeRoom(String homeRoom) {
        this.homeRoom = homeRoom;
    }

    @Override
    public String toString() {
        return name;
    }
}

Я пытаюсь сгруппировать людей по предпочтениям, и я изначально запрограммировал это на greenfoot, и это сработало отлично. Однако недавно я хотел внедрить это в проект в intellij, с javafx. Когда я тестировал, система выводила ноль. Хотя я также планирую l oop список объектов вместо добавления каждого в список - я пробовал это, и он продолжал посылать нули.

[null, null, null]
[null, null, null]
[null, null]

Я хочу напечатать что-то вроде

[person1, person3, person 6]
[person 5, person 2, person 4]
[person 7, person 8]

1 Ответ

0 голосов
/ 03 мая 2020

Почему вы сортируете значения и используете AtomicInteger? Попробуйте это так.

Сначала я добавил несколько имен

int i = 1;
for (PeopleClass p : people) {
    p.setName("Person" + i++);
}

Затем я сгруппировал по полу


List<List<PeopleClass>> groups = new ArrayList<>(people
        .stream()
        .collect(Collectors
                .groupingBy(PeopleClass::getGender))
        .values());

И напечатал их.

groups.forEach(System.out::println);

Вот результат

[Person3:n/a]
[Person2:female, Person4:female, Person5:female, Person6:female]
[Person1:male, Person8:male]
[Person7:trans]

Примечание. В вашем классе People отсутствуют некоторые вещи, такие как

  • Объявление класса
  • Поля
  • и переопределение toString () (я должен был его создать).
...