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