[JAVA] Aggregieren Sie die Fragebogenergebnisse der "Lieblingsjahreszeit" nach Geschlecht und Alter

Inhaltsverzeichnis ⇒ 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;

/**
 *Aggregieren Sie die Fragebogenergebnisse der "Lieblingsjahreszeit" nach Geschlecht und Alter
 *
 *・ Bitten Sie sie, ihre Lieblingsjahreszeit zu beantworten.Fragen Sie außerdem nach Ihrem Namen, Geschlecht und Alter.
 *・ Aggregieren Sie die Ergebnisse.
 *・ Nach Jahreszeit aggregieren.
 *・ Gesamtfälle für Frauen.
 *・ Aggregiert nach Altersgruppen
 *
 *- Verwenden Sie die folgende Methode von ArList.
 *    Integer[] histogram(Collection<T0> collection,ArCreator<T0,T1> creator,ArValidator<T1>[] validators)
 *- Erstellen Sie mit dem Ersteller ein T1-Objekt aus dem T0-Objekt und überprüfen Sie es mit Validatoren..
 *-Die Zählnummer, die dem Validator-Array entspricht, wird zurückgegeben..
 *
 *・ Wenn mehrere Felder überprüft werden müssen, z. B. "Nach Altersgruppen aggregieren". ⇒ Sehen Sie sich das Beispiel an und lesen Sie es erneut..
 *・ ArCreator Self(ArCreator, der das Argument selbst zurückgibt)Benutzen
 *-ArValidator, der jedes Feld mit T0 als Argument überprüft(Anordnung von)Erschaffen.
 *- Erstellen Sie eine Kombination der oben genannten mehreren ArValidator-Sequenzen.
 *・ Ein universeller ArValidator, der T0 unterstützt(normalerweise)ArValidator ist eine proprietäre Implementierung, da dies nicht möglich ist.
 *
 */
public class Q01_00 {
  public static void main(String[] args) throws Exception {
    L.p("Fragebogen durchführen");
    List<EnquetePaper> papers = execEnquete();
    //
    L.p("Nach Jahreszeit aggregieren");
    {
      //Erstellung des Erstellers ⇒ Zu aggregierende Felder sind saisonabhängig
      ArCreator<EnquetePaper,ArSeason> creator = new ArCreator<EnquetePaper,ArSeason>() {
        @Override
        public ArSeason convert(EnquetePaper obj) throws Exception {
          return obj.getSeason();
        }
      };
      //Erstellen Sie für jede Saison einen ArValidator
      //ArValidatorEq bestimmt, ob das Prüfziel dem Argument des Konstruktors ArValidator entspricht
      ArValidatorEq<ArSeason>[] validators = ArValidatorUtil.createArValidatorEqArray(ArSeason.values());
      //Übereinstimmen
      Integer[] results = ArList.histogram(papers,creator,validators);
      //Schauen Sie sich die Ergebnisse an
      L.p(ArObj.toString2Arrays(validators,results));
    }

    L.p("Nach Jahreszeit aggregieren-Eine andere Lösung");
    {
      /*
       *Eine weitere Lösung, die ArCreator Self verwendet.
       *ArValidator ist eine proprietäre Implementierung, da der Ersteller Enquete Paper zurückgibt.
       *Wenn nur ein Feld überprüft werden muss, ist dies nicht erforderlich. Sehen Sie es sich daher als Beispiel an..
       */
      //
      ArCreator<EnquetePaper,EnquetePaper> creator = new ArCreatorSelf<EnquetePaper>();
      //ArValidator zum Überprüfen der 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;
      }
      //Erstellen Sie für jede Saison einen ArValidator
      ArValidator<EnquetePaper>[] validators = new ArValidator[] {
        new SeasonValidator(ArSeason.SPRING),
        new SeasonValidator(ArSeason.SUMMER),
        new SeasonValidator(ArSeason.AUTUMN),
        new SeasonValidator(ArSeason.WINTER),
      };
      //Übereinstimmen
      Integer[] results = ArList.histogram(papers, creator, validators);
      //Schauen Sie sich die Ergebnisse an
      L.p(ArObj.toString2Arrays(validators,results));
    }

    L.p("Gesamtfälle für Frauen");
    {
      //Die zu aggregierenden Felder sind saisonabhängig
      ArCreator<EnquetePaper,ArSeason> creator = new ArCreator<EnquetePaper,ArSeason>() {
        @Override
        public ArSeason convert(EnquetePaper obj) throws Exception {
          //Geben Sie für Männer null zurück ⇒ Wenn null, wird es nicht gezählt(Kann nicht).
          return obj.getGender()==ArGender.Female ? obj.getSeason() : null;
        }
      };
      //Erstellen Sie für jede Saison einen ArValidator
      ArValidator<ArSeason>[] validators = ArValidatorUtil.createArValidatorEqArray(ArSeason.values());
      //Übereinstimmen
      Integer[] results = ArList.histogram(papers, creator, validators);
      //Schauen Sie sich die Ergebnisse an
      L.p(ArObj.toString2Arrays(validators,results));
    }

    L.p("Gesamtfälle für Frauen-Eine andere Lösung");
    {
      //Die zu aggregierenden Felder sind saisonabhängig
      ArCreator<EnquetePaper,ArSeason> creator = new ArCreator<EnquetePaper,ArSeason>() {
        @Override
        public ArSeason convert(EnquetePaper obj) throws Exception {
          return obj.getSeason();
        }
      };
      //Erstellen Sie für jede Saison einen ArValidator
      ArValidator<ArSeason>[] validators = ArValidatorUtil.createArValidatorEqArray(ArSeason.values());
      //
      //Erstellen Sie Daten, die nur Frauen extrahieren.
      List<EnquetePaper> femalePapers;
      {
        //Erstellen Sie einen ArValidator, der für weibliche Daten gilt
        ArValidator<EnquetePaper> femaleValidator = new ArValidator<EnquetePaper>() {
          @Override
          public boolean check(EnquetePaper value) {
            return value.getGender()==ArGender.Female;
          }
        };
        //Extrakt
        femalePapers = ArList.select(papers,femaleValidator);
      }
      //Aggregat für weibliche Papiere
      Integer[] results = ArList.histogram(femalePapers, creator, validators);
      //Schauen Sie sich die Ergebnisse an
      L.p(ArObj.toString2Arrays(validators,results));
    }

    L.p("Aggregiert nach Altersgruppen");
    {
      /*
       *Die Idee ist, einen ArValidator zu erstellen, der das Alter überprüft, und einen ArValidator, der die Saison basierend auf Enquete Paper überprüft..
       *ArValidator ist eine proprietäre Implementierung, da EnquetePaper eine eindeutige Klasse ist und das Feld darin überprüft wird..
       *Zwei Arten von ArValidator(Anordnung von)Basierend auf,(Verwenden von ArValidatorUtil)Erstellen Sie diese Kombination.
       */
      //Verwenden Sie ArCreator Self, um Alters- und Jahreszeitenfelder anzuzeigen
      ArCreator<EnquetePaper,EnquetePaper> creator = new ArCreatorSelf<EnquetePaper>();
      //ArValidator des Alters
      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;
      }
      //Teilen Sie das Alter in frühe zwanziger und späte zwanziger Jahre ein
      ArValidator<EnquetePaper>[] validators0 = new ArValidator[] {
        new AgeValidator(20,24),
        new AgeValidator(25,29),
      };
      //Saisonaler ArValidator
      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),
      };
      //Erstellen Sie eine Kombination aus Alter und Jahreszeit der ArValidator-Sequenzen
      //Die ArValidator-Gruppe ist ein ArValidator, der mehrere ArValidatoren kombiniert.
      ArValidatorGroup<EnquetePaper>[] validators = ArValidatorUtil.createCombination(validators0,validators1);
      //Übereinstimmen
      Integer[] results = ArList.histogram(papers, creator, validators);
      //Schauen Sie sich die Ergebnisse an
      L.p(ArObj.toString2Arrays(validators,results));
    }
  }

  /**Führen Sie einen Fragebogen durch*/
  private static List<EnquetePaper> execEnquete() {
    /*
     *Beachten Sie, dass RandomFrom unten eine Schnittstelle ist, die Elemente aus einer Sammlung oder einem Array zufällig abruft..
     *Sie können angeben, ob dasselbe mit ArRepeat erneut abgerufen werden soll
     */
    //Name ⇒ Zufällig aus einem Großbuchstaben generiert ⇒ ArRepeat.NO(Kein gleicher Name)
    ArRandomFromArray<String> names = new ArRandomFromArray<String>(ArCharDef.upperStr,ArRepeat.NO);
    //Geschlecht ⇒ Männlich/Eine der Frauen(Ignoriere andere)
    ArRandomFromArray<ArGender> genders = new ArRandomFromArray<ArGender>(new ArGender[]{ArGender.Male,ArGender.Female},ArRepeat.YES);
    //Alter ⇒ 20 bis 29 Jahre alt..
    ArRandomFromCollection<Integer> ages;
    {
      //Generieren Sie 20 bis 10 Zahlen in Intervallen von 1
      List<Integer> values = ArList.constructSeqList(20,10,1);
      ages = new ArRandomFromCollection<Integer>(values,ArRepeat.YES); //Es sollte gleichaltrige Menschen geben..
    }
    //Jahreszeit
    ArRandomFromArray<ArSeason> seansons = new ArRandomFromArray<ArSeason>(ArSeason.values(),ArRepeat.YES);
    //Fragebogen durchführen
    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());
      //Ausgabe zur visuellen Bestätigung ⇒ Funktioniert ohne Neudefinition von String
      L.p(ArObj.toString(paper));
      list.add(paper);
    }
    return list;
  }

  /**Fragebogen(Enquete ist französisch) */
  static class EnquetePaper {
    /**Konstrukteur*/
    public EnquetePaper(String name,ArGender gender,int age,ArSeason season) {
      this.name = name;
      this.gender = gender;
      this.age = age;
      this.season = season;
    }
    /**Vollständiger Name*/
    private String name;
    /**Sex. */
    private ArGender gender;
    /**Alter*/
    private int age;
    /**Jahreszeit*/
    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;
    }
  }
}

Das Ergebnis ist wie folgt.


Fragebogen durchführen
[age=23, gender=männlich, name=O, season=Herbst]
[age=26, gender=Weiblich, name=S, season=Frühling]
[age=22, gender=Weiblich, name=U, season=Herbst]
[age=29, gender=männlich, name=B, season=Herbst]
[age=20, gender=Weiblich, name=C, season=Frühling]
[age=27, gender=männlich, name=D, season=Winter]
[age=26, gender=Weiblich, name=P, season=Frühling]
[age=23, gender=männlich, name=T, season=Winter]
[age=23, gender=Weiblich, name=W, season=Sommer-]
[age=20, gender=männlich, name=N, season=Sommer-]
[age=29, gender=männlich, name=E, season=Herbst]
[age=20, gender=Weiblich, name=M, season=Sommer-]
[age=22, gender=männlich, name=A, season=Herbst]
[age=26, gender=männlich, name=H, season=Herbst]
[age=26, gender=männlich, name=I, season=Herbst]
[age=20, gender=Weiblich, name=L, season=Winter]
[age=29, gender=Weiblich, name=V, season=Sommer-]
[age=27, gender=Weiblich, name=Z, season=Sommer-]
[age=20, gender=Weiblich, name=X, season=Herbst]
[age=20, gender=Weiblich, name=J, season=Sommer-]
Nach Jahreszeit aggregieren
Frühling-> 3
Sommer--> 6
Herbst-> 8
Winter-> 3
Nach Jahreszeit aggregieren-Eine andere Lösung
Frühling-> 3
Sommer--> 6
Herbst-> 8
Winter-> 3
Gesamtfälle für Frauen
Frühling-> 3
Sommer--> 5
Herbst-> 2
Winter-> 1
Gesamtfälle für Frauen-Eine andere Lösung
Frühling-> 3
Sommer--> 5
Herbst-> 2
Winter-> 1
Aggregiert nach Altersgruppen
20-24:Frühling-> 1
20-24:Sommer--> 4
20-24:Herbst-> 4
20-24:Winter-> 2
25-29:Frühling-> 2
25-29:Sommer--> 2
25-29:Herbst-> 4
25-29:Winter-> 1


Recommended Posts

Aggregieren Sie die Fragebogenergebnisse der "Lieblingsjahreszeit" nach Geschlecht und Alter
Was ist, wenn die Ergebnisse von Summe und Injektion (: +) unterschiedlich sind?