[JAVA] Agréger le nombre de personnes tous les 10 ans à partir de la liste <Personne>

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

Agréger le nombre de personnes tous les 10 ans à partir de la liste <Personne>
Trouvez l'âge moyen dans la liste <Personne>.
ArrayList et le rôle de l'interface vu depuis List
Extraire un élément spécifique de la liste des objets
Un programme qui compte le nombre de mots dans une liste
[Java] Supprimer le nombre spécifié de caractères à la fin de StringBuilder
Méthode pour additionner le nombre d'années et obtenir la fin du mois
De Java naissant (3 ans) à Node.js (4 ans). Et l'impression de retourner à Java
[Java] Supprimer les éléments de la liste
Programme pour trouver le nombre de jours par mois y compris hors-année
[Challenge CircleCI from 0] Apprenez les bases de CircleCI
Comment trier une liste de SelectItems
Traitez n'importe quel nombre de cas dans la liste Java
[Java] Vérifiez le nombre d'occurrences de caractères
Trouvez la différence à partir d'un multiple de 10
Trouvez une section qui satisfait continuellement les conditions (plus que le nombre de fois spécifié) dans la liste (vérifiez le temps libre de la salle de conférence)