[JAVA] Agréger les résultats du questionnaire de la «saison préférée», agréger par sexe et par âge

Table des matières ⇒ Java Algorithm Library-Artery-Sample

Q01_00.java



package jp.avaj.lib.algo;

import java.util.ArrayList;
import java.util.List;

import jp.avaj.lib.def.ArCharDef;
import jp.avaj.lib.def.ArRepeat;
import jp.avaj.lib.test.L;

/**
 *Agréger les résultats du questionnaire de la «saison préférée», agréger par sexe et par âge
 *
 *・ Demandez-leur de répondre à leur saison préférée.De plus, demandez votre nom, votre sexe et votre âge.
 *・ Agréger les résultats.
 *・ Agréger par saison.
 *・ Cas agrégés pour les femmes.
 *・ Agréger par groupe d'âge
 *
 *-Utilisez la méthode suivante de ArList.
 *    Integer[] histogram(Collection<T0> collection,ArCreator<T0,T1> creator,ArValidator<T1>[] validators)
 *-Créer un objet T1 à partir de l'objet T0 avec le créateur et le vérifier avec les validateurs..
 *-Le nombre de comptage correspondant au tableau des validateurs est renvoyé..
 *
 *・ Lorsqu'il y a plusieurs champs à vérifier, tels que "Agréger par groupe d'âge" ⇒ Voir l'exemple et le relire..
 *・ ArCreator Self(ArCreator qui renvoie l'argument lui-même)Utiliser
 *-ArValidator qui vérifie chaque champ avec T0 comme argument(Tableau de)Créer.
 *-Créer une combinaison des multiples séquences ArValidator ci-dessus.
 *・ Un ArValidator polyvalent qui prend en charge T0(normalement)ArValidator sera une implémentation propriétaire car ce n'est pas possible.
 *
 */
public class Q01_00 {
  public static void main(String[] args) throws Exception {
    L.p("Réaliser un questionnaire");
    List<EnquetePaper> papers = execEnquete();
    //
    L.p("Agréger par saison");
    {
      //Création du créateur ⇒ Les champs à agréger sont saisonniers
      ArCreator<EnquetePaper,ArSeason> creator = new ArCreator<EnquetePaper,ArSeason>() {
        @Override
        public ArSeason convert(EnquetePaper obj) throws Exception {
          return obj.getSeason();
        }
      };
      //Créez un ArValidator pour chaque saison
      //ArValidatorEq détermine si la cible de contrôle est égale à l'argument du constructeur ArValidator
      ArValidatorEq<ArSeason>[] validators = ArValidatorUtil.createArValidatorEqArray(ArSeason.values());
      //Pointage
      Integer[] results = ArList.histogram(papers,creator,validators);
      //Jetez un œil aux résultats
      L.p(ArObj.toString2Arrays(validators,results));
    }

    L.p("Agréger par saison-Une autre solution");
    {
      /*
       *Une autre solution qui utilise ArCreator Self.
       *ArValidator sera une implémentation propriétaire car le retour du créateur sera Enquete Paper.
       *S'il n'y a qu'un seul champ à vérifier, il n'est pas nécessaire de le faire, veuillez donc le voir comme exemple..
       */
      //
      ArCreator<EnquetePaper,EnquetePaper> creator = new ArCreatorSelf<EnquetePaper>();
      //ArValidator pour vérifier la saison
      class SeasonValidator implements ArValidator<EnquetePaper> {
        public SeasonValidator(ArSeason season) {
          this.season = season;
        }
        @Override
        public boolean check(EnquetePaper value) {
          return value.getSeason() == season;
        }
        @Override
        public String toString() {
          return ArObj.toString(season);
        }
        private ArSeason season;
      }
      //Créez un ArValidator pour chaque saison
      ArValidator<EnquetePaper>[] validators = new ArValidator[] {
        new SeasonValidator(ArSeason.SPRING),
        new SeasonValidator(ArSeason.SUMMER),
        new SeasonValidator(ArSeason.AUTUMN),
        new SeasonValidator(ArSeason.WINTER),
      };
      //Pointage
      Integer[] results = ArList.histogram(papers, creator, validators);
      //Jetez un œil aux résultats
      L.p(ArObj.toString2Arrays(validators,results));
    }

    L.p("Cas agrégés pour les femmes");
    {
      //Les champs à agréger sont saisonniers
      ArCreator<EnquetePaper,ArSeason> creator = new ArCreator<EnquetePaper,ArSeason>() {
        @Override
        public ArSeason convert(EnquetePaper obj) throws Exception {
          //Pour les hommes, retourne null ⇒ Si nul, il ne sera pas compté(Ne peux pas).
          return obj.getGender()==ArGender.Female ? obj.getSeason() : null;
        }
      };
      //Créez un ArValidator pour chaque saison
      ArValidator<ArSeason>[] validators = ArValidatorUtil.createArValidatorEqArray(ArSeason.values());
      //Pointage
      Integer[] results = ArList.histogram(papers, creator, validators);
      //Jetez un œil aux résultats
      L.p(ArObj.toString2Arrays(validators,results));
    }

    L.p("Cas agrégés pour les femmes-Une autre solution");
    {
      //Les champs à agréger sont saisonniers
      ArCreator<EnquetePaper,ArSeason> creator = new ArCreator<EnquetePaper,ArSeason>() {
        @Override
        public ArSeason convert(EnquetePaper obj) throws Exception {
          return obj.getSeason();
        }
      };
      //Créez un ArValidator pour chaque saison
      ArValidator<ArSeason>[] validators = ArValidatorUtil.createArValidatorEqArray(ArSeason.values());
      //
      //Créez des données qui n'extraient que des femmes.
      List<EnquetePaper> femalePapers;
      {
        //Créez un ArValidator qui est vrai pour les données féminines
        ArValidator<EnquetePaper> femaleValidator = new ArValidator<EnquetePaper>() {
          @Override
          public boolean check(EnquetePaper value) {
            return value.getGender()==ArGender.Female;
          }
        };
        //Extrait
        femalePapers = ArList.select(papers,femaleValidator);
      }
      //Agrégat pour papiers féminins
      Integer[] results = ArList.histogram(femalePapers, creator, validators);
      //Jetez un œil aux résultats
      L.p(ArObj.toString2Arrays(validators,results));
    }

    L.p("Agréger par groupe d'âge");
    {
      /*
       *L'idée est de créer un ArValidator qui vérifie l'âge et un ArValidator qui vérifie la saison sur la base d'Enquete Paper..
       *ArValidator est une implémentation propriétaire car EnquetePaper est une classe unique et c'est le champ qui y est vérifié..
       *Deux types d'ArValidator(Tableau de)Basé sur,(Utilisation d'ArValidatorUtil)Créez cette combinaison.
       */
      //Utilisez ArCreator Self pour voir les champs d'âge et de saison
      ArCreator<EnquetePaper,EnquetePaper> creator = new ArCreatorSelf<EnquetePaper>();
      //ArValidator d'âge
      class AgeValidator implements ArValidator<EnquetePaper> {
        public AgeValidator(int low,int high) {
          this.low = low;
          this.high = high;
        }
        @Override
        public boolean check(EnquetePaper value) {
          return ((low <= value.getAge()) && (value.getAge() <= high));
        }
        @Override
        public String toString() {
          return low+"-"+high;
        }
        private int low;
        private int high;
      }
      //Divisez l'âge entre le début de la vingtaine et la fin de la vingtaine
      ArValidator<EnquetePaper>[] validators0 = new ArValidator[] {
        new AgeValidator(20,24),
        new AgeValidator(25,29),
      };
      //ArValidator saisonnier
      class SeasonValidator implements ArValidator<EnquetePaper> {
        public SeasonValidator(ArSeason season) {
          this.season = season;
        }
        @Override
        public boolean check(EnquetePaper value) {
          return season == value.getSeason();
        }
        @Override
        public String toString() {
          return ArObj.toString(season);
        }
        private ArSeason season;
      }
      //
      ArValidator<EnquetePaper>[] validators1 = new ArValidator[] {
        new SeasonValidator(ArSeason.SPRING),
        new SeasonValidator(ArSeason.SUMMER),
        new SeasonValidator(ArSeason.AUTUMN),
        new SeasonValidator(ArSeason.WINTER),
      };
      //Créer une combinaison de séquences ArValidator d'âge et de saison
      //ArValidator Group est un ArValidator qui combine plusieurs ArValidator.
      ArValidatorGroup<EnquetePaper>[] validators = ArValidatorUtil.createCombination(validators0,validators1);
      //Pointage
      Integer[] results = ArList.histogram(papers, creator, validators);
      //Jetez un œil aux résultats
      L.p(ArObj.toString2Arrays(validators,results));
    }
  }

  /**Réaliser un questionnaire*/
  private static List<EnquetePaper> execEnquete() {
    /*
     *Remarque: RandomFrom ci-dessous est une interface qui récupère aléatoirement des éléments d'une collection ou d'un tableau..
     *Vous pouvez spécifier si vous souhaitez récupérer à nouveau la même chose avec ArRepeat
     */
    //Nom ⇒ Généré aléatoirement à partir d'une lettre majuscule ⇒ ArRepeat.NO(Pas le même nom)
    ArRandomFromArray<String> names = new ArRandomFromArray<String>(ArCharDef.upperStr,ArRepeat.NO);
    //Sexe ⇒ Homme/L'une ou l'autre des femmes(Ignorer les autres)
    ArRandomFromArray<ArGender> genders = new ArRandomFromArray<ArGender>(new ArGender[]{ArGender.Male,ArGender.Female},ArRepeat.YES);
    //Âge ⇒ 20 à 29 ans..
    ArRandomFromCollection<Integer> ages;
    {
      //Génère 20 à 10 nombres à des intervalles de 1
      List<Integer> values = ArList.constructSeqList(20,10,1);
      ages = new ArRandomFromCollection<Integer>(values,ArRepeat.YES); //Il devrait y avoir des gens du même âge..
    }
    //Saison
    ArRandomFromArray<ArSeason> seansons = new ArRandomFromArray<ArSeason>(ArSeason.values(),ArRepeat.YES);
    //Réaliser un questionnaire
    List<EnquetePaper> list = new ArrayList<EnquetePaper>();
    for (int i=0; i<20; i++) {
      EnquetePaper paper = new EnquetePaper(names.get(),genders.get(),ages.get(),seansons.get());
      //Sortie pour confirmation visuelle ⇒ Fonctionne sans redéfinir toString
      L.p(ArObj.toString(paper));
      list.add(paper);
    }
    return list;
  }

  /**questionnaire(Enquete est français) */
  static class EnquetePaper {
    /**constructeur*/
    public EnquetePaper(String name,ArGender gender,int age,ArSeason season) {
      this.name = name;
      this.gender = gender;
      this.age = age;
      this.season = season;
    }
    /**Nom complet*/
    private String name;
    /**sexe. */
    private ArGender gender;
    /**âge*/
    private int age;
    /**Saison*/
    private ArSeason season;
    public String getName() {
      return name;
    }
    public void setName(String name) {
      this.name = name;
    }
    public ArGender getGender() {
      return gender;
    }
    public void setGender(ArGender gender) {
      this.gender = gender;
    }
    public int getAge() {
      return age;
    }
    public void setAge(int age) {
      this.age = age;
    }
    public ArSeason getSeason() {
      return season;
    }
    public void setSeason(ArSeason season) {
      this.season = season;
    }
  }
}

Le résultat est le suivant.


Réaliser un questionnaire
[age=23, gender=Masculin, name=O, season=l'automne]
[age=26, gender=Femme, name=S, season=printemps]
[age=22, gender=Femme, name=U, season=l'automne]
[age=29, gender=Masculin, name=B, season=l'automne]
[age=20, gender=Femme, name=C, season=printemps]
[age=27, gender=Masculin, name=D, season=hiver]
[age=26, gender=Femme, name=P, season=printemps]
[age=23, gender=Masculin, name=T, season=hiver]
[age=23, gender=Femme, name=W, season=été]
[age=20, gender=Masculin, name=N, season=été]
[age=29, gender=Masculin, name=E, season=l'automne]
[age=20, gender=Femme, name=M, season=été]
[age=22, gender=Masculin, name=A, season=l'automne]
[age=26, gender=Masculin, name=H, season=l'automne]
[age=26, gender=Masculin, name=I, season=l'automne]
[age=20, gender=Femme, name=L, season=hiver]
[age=29, gender=Femme, name=V, season=été]
[age=27, gender=Femme, name=Z, season=été]
[age=20, gender=Femme, name=X, season=l'automne]
[age=20, gender=Femme, name=J, season=été]
Agréger par saison
printemps-> 3
été-> 6
l'automne-> 8
hiver-> 3
Agréger par saison-Une autre solution
printemps-> 3
été-> 6
l'automne-> 8
hiver-> 3
Cas agrégés pour les femmes
printemps-> 3
été-> 5
l'automne-> 2
hiver-> 1
Cas agrégés pour les femmes-Une autre solution
printemps-> 3
été-> 5
l'automne-> 2
hiver-> 1
Agréger par groupe d'âge
20-24:printemps-> 1
20-24:été-> 4
20-24:l'automne-> 4
20-24:hiver-> 2
25-29:printemps-> 2
25-29:été-> 2
25-29:l'automne-> 4
25-29:hiver-> 1


Recommended Posts

Agréger les résultats du questionnaire de la «saison préférée», agréger par sexe et par âge
Et si les résultats de sum et inject (: +) sont différents?