Сортировка группы людей по предпочтениям - PullRequest
0 голосов
/ 26 апреля 2020

Я разрабатываю генератор групп, который принимает предпочтения, такие как «смешать пол», «смешать национальность» ... Я помещаю список имен учеников, за которыми следуют национальность и набор генов, в массив. Какой самый простой способ создать группы, основанные на пользовательском вводе, это то, что каждая группа состоит из людей разных национальностей или сбалансированного пола.

 public ArrayList<String> readEachWord(String className)
    {
        ArrayList<String> readword = new ArrayList<String>();
        Scanner sc2 = null;
        try {
        sc2 = new Scanner(new File(className + ".txt"));
    } catch (FileNotFoundException e) {

        System.out.println("error, didnt find file");
        e.printStackTrace();  
    }
    while (sc2.hasNextLine()) {
            Scanner s2 = new Scanner(sc2.nextLine());
        while (s2.hasNext()) {
            String s = s2.next();
            readword.add(s);
        }
    }
    return readword;


    }

Я использую это для чтения текстового файла, и на каждом линия, у меня есть имя каждого студента национальности и пола. Я поместил их в ArrayList и сейчас пытаюсь выяснить, как равномерно распределить их на основе номеров групп, желаемых пользователем.

Я использую txt-файл для хранения всей информации, поскольку этот генератор групп является настроены для моей школы.

1 Ответ

1 голос
/ 26 апреля 2020

Вот кое-что, с чего можно начать. Этот короткий аль go будет сортировать людей на основе указанного дискриминатора (национальность, пол и т. Д. c.), А затем равномерно распределять их по указанному количеству групп.

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Comparator;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Function;
import java.util.stream.Collectors;

public class Main {

    private static class Person {
        private String nationality;
        private String gender;

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


        public String getNationality() {
            return nationality;
        }

        public String getGender() {
            return gender;
        }

        @Override
        public String toString() {
            return "Person{" +
                    "nationality='" + nationality + "'" +
                    ", gender='" + gender + "'" +
                    "}";
        }
    }

    public static void main(String[] args) {
        List<Person> people = Arrays.asList(
            new Person("DE", "male"),
            new Person("DE", "female"),
            new Person("DE", "n/a"),
            new Person("UK", "female"),
            new Person("UK", "female"),
            new Person("UK", "female"),
            new Person("JP", "trans"),
            new Person("JP", "male")
        );


        int number_of_groups = 3;

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

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

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

Вывод:

[Person{nationality='DE', gender='female'}, Person{nationality='UK', gender='female'}, Person{nationality='JP', gender='trans'}]
[Person{nationality='UK', gender='female'}, Person{nationality='DE', gender='male'}]
[Person{nationality='UK', gender='female'}, Person{nationality='DE', gender='n/a'}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...