基于首选项的分组不断返回空值

问题描述 投票:-1回答:1
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上编写此程序的,因此效果很好。但是,我最近想将其嵌入到具有javafx的intellij项目中。当我测试时,它的系统输出为null。尽管我还计划循环一个对象列表,而不是将每个对象添加到列表中-但我尝试了这一点,并一直发送空值。

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

我想打印类似的东西

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

java list grouping atomicinteger
1个回答
0
投票
为什么要对值进行排序并使用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类缺少某些内容,例如

    A类声明
  • 字段
  • 和toString()重写(我必须组成一个)。
© www.soinside.com 2019 - 2024. All rights reserved.