Table des matières ⇒ Java Algorithm Library-Artery-Sample
Q01_10.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.ArMatch;
import jp.avaj.lib.def.ArRepeat;
import jp.avaj.lib.test.L;
/**
* List<Person>Agréger le nombre de personnes tous les 10 ans à partir de
*
*-Utilisez la méthode suivante de ArList.
* Integer[] histogram(Collection<T0> collection,ArCreator<T0,T1> creator,ArValidator<T1>[] validators)
*
*-Utiliser le créateur pour extraire les données à agréger de l'objet T0 de la liste.
*・ Dans cet exemple, l'âge est extrait de l'objet Person..
*
*· Utiliser des validateurs pour stratifier les âges extraits.
*・ Bien qu'il s'agisse d'un tableau, il devrait retourner vrai tous les 10 ans..
*
*/
public class Q01_10 {
public static void main(String[] args) throws Exception {
List<Person> personList = createPersonList();
//
//ArCreator ⇒ Extraire l'âge de la personne
ArCreator<Person,Integer> creator = new ArCreator<Person,Integer>() {
@Override
public Integer convert(Person obj) throws Exception {
return obj.getAge();
}
};
//ArValidator pour déterminer l'âge
ArValidatorIntRange[] validators = new ArValidatorIntRange[] {
new ArValidatorIntRange(10,20,ArMatch.YES), // 10(Comprenant)~20(Non inclus),ArMatch.YES,NON annule le jugement
new ArValidatorIntRange(20,30,ArMatch.YES),
new ArValidatorIntRange(30,40,ArMatch.YES),
new ArValidatorIntRange(40,50,ArMatch.YES),
new ArValidatorIntRange(50,60,ArMatch.YES),
};
Integer[] result;
//Créer un histogramme
result = ArList.histogram(personList,creator, validators);
L.p(ArObj.toString2Arrays(validators,result));
L.p("Une autre solution");
//Une autre solution d'ArCreator.Utilisez ArCreatorByName pour obtenir la valeur du nom de champ en tant qu'ArCreator générique.
creator = new ArCreatorByName<Person,Integer>("age");
//Une autre solution d'ArValidator
//Créer ArValidator un par un comme la première solution est fastidieux.
//Il peut également être facilement généré comme suit.Remarque, nul peut être spécifié aux deux extrémités ⇒ plage infinie
validators = ArValidatorUtil.createArValidatorIntRangeArray(new Integer[]{10,20,30,40,50,60});
result = ArList.histogram(personList,creator, validators);
L.p(ArObj.toString2Arrays(validators,result));
}
private static List<Person> createPersonList() {
//Classe pour générer un nom ⇒ Le nom est une seule lettre supérieure
//ArRandomFromArray récupère la valeur au hasard dans le tableau, ArRepeat spécifie s'il faut récupérer la même valeur.
ArRandomFromArray<String> names = new ArRandomFromArray<String>(ArCharDef.upperStr,ArRepeat.NO);
//Classe pour générer l'âge ⇒ 10(Comprenant)~60(Non inclus)Générer au hasard un entier
ArRandomFromInteger ages = new ArRandomFromInteger(10,60);
List<Person> list = new ArrayList<Person>();
for (int i=0; i<20; i++) {
Person person = new Person(names.get(),ages.get());
L.p(ArObj.toString(person)); //En faisant cela, le contenu sera affiché même si toString n'est pas implémenté..
list.add(person);
}
return list;
}
static class Person {
public Person(String name,int age) {
this.name = name;
this.age = age;
}
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
}
Le résultat est le suivant
result.txt
[age=31, name=S]
[age=26, name=F]
[age=42, name=K]
[age=43, name=Y]
[age=22, name=M]
[age=34, name=N]
[age=11, name=E]
[age=36, name=Q]
[age=13, name=U]
[age=41, name=X]
[age=39, name=Z]
[age=47, name=O]
[age=47, name=P]
[age=59, name=H]
[age=52, name=A]
[age=17, name=D]
[age=35, name=C]
[age=47, name=W]
[age=55, name=J]
[age=11, name=R]
[10-20) -> 4
[20-30) -> 2
[30-40) -> 5
[40-50) -> 6
[50-60) -> 3
Une autre solution
[10-20) -> 4
[20-30) -> 2
[30-40) -> 5
[40-50) -> 6
[50-60) -> 3
Recommended Posts