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