[JAVA] Aggregieren Sie die Anzahl der Personen alle 10 Jahre aus Liste <Person>

Inhaltsverzeichnis ⇒ 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>
 *
 *- Verwenden Sie die folgende Methode von ArList.
 *  Integer[] histogram(Collection<T0> collection,ArCreator<T0,T1> creator,ArValidator<T1>[] validators)
 *
 *- Verwenden Sie den Ersteller, um Daten zu extrahieren, die aus dem Objekt T0 der Liste aggregiert werden sollen.
 *・ In diesem Beispiel wird das Alter aus dem Personenobjekt extrahiert..
 *
 *· Verwenden Sie Validatoren, um das extrahierte Alter zu schichten.
 *・ Obwohl es sich um ein Array handelt, sollte es alle 10 Jahre true zurückgeben..
 *
 */
public class Q01_10 {
  public static void main(String[] args) throws Exception {
    List<Person> personList = createPersonList();
    //
    //ArCreator ⇒ Alter aus Person extrahieren
    ArCreator<Person,Integer> creator = new ArCreator<Person,Integer>() {
      @Override
      public Integer convert(Person obj) throws Exception {
        return obj.getAge();
      }
    };
    //ArValidator zur Altersbestimmung
    ArValidatorIntRange[] validators = new ArValidatorIntRange[] {
      new ArValidatorIntRange(10,20,ArMatch.YES), // 10(Einschließlich)~20(Nicht enthalten),ArMatch.YES,NEIN hebt das Urteil auf
      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;
    //Erstellen Sie ein Histogramm
    result = ArList.histogram(personList,creator, validators);
    L.p(ArObj.toString2Arrays(validators,result));

    L.p("Eine andere Lösung");
    //Eine andere Lösung von ArCreator.Verwenden Sie ArCreatorByName, um den Wert aus dem Feldnamen als generischen ArCreator abzurufen.
    creator = new ArCreatorByName<Person,Integer>("age");
    //Eine andere Lösung von ArValidator
    //Das Erstellen von ArValidator nacheinander wie bei der ersten Lösung ist mühsam.
    //Es kann auch leicht wie folgt erzeugt werden.Beachten Sie, dass an beiden Enden null angegeben werden kann ⇒ unendlicher Bereich
    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() {
    //Klasse zum Generieren eines Namens ⇒ Name ist ein einzelner Großbuchstabe
    //ArRandomFromArray ruft den Wert zufällig aus dem Array ab. ArRepeat gibt an, ob derselbe Wert abgerufen werden soll.
    ArRandomFromArray<String> names = new ArRandomFromArray<String>(ArCharDef.upperStr,ArRepeat.NO);
    //Klasse zur Altersgenerierung ⇒ 10(Einschließlich)~60(Nicht enthalten)Generiere zufällig eine Ganzzahl
    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)); //Auf diese Weise wird der Inhalt angezeigt, auch wenn toString nicht implementiert ist..
      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;
    }
  }
}


Das Ergebnis ist wie folgt

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
Eine andere Lösung
[10-20) -> 4
[20-30) -> 2
[30-40) -> 5
[40-50) -> 6
[50-60) -> 3


Recommended Posts

Aggregieren Sie die Anzahl der Personen alle 10 Jahre aus Liste <Person>
Finden Sie das Durchschnittsalter aus Liste <Person>.
ArrayList und die Rolle der Schnittstelle aus List
Extrahieren Sie ein bestimmtes Element aus der Liste der Objekte
Ein Programm, das die Anzahl der Wörter in einer Liste zählt
[Java] Löschen Sie die angegebene Anzahl von Zeichen am Ende von StringBuilder
Methode, um die Anzahl der Jahre zu addieren und das Monatsende zu erhalten
Vom jungen Java (3 Jahre) bis zu Node.js (4 Jahre). Und der Eindruck, nach Java zurückzukehren
[Java] Löschen Sie die Elemente von List
Programm zum Ermitteln der Anzahl der Tage pro Monat einschließlich des Nebenjahres
[Herausforderung CircleCI von 0] Lernen Sie die Grundlagen von CircleCI
So sortieren Sie eine Liste von SelectItems
Verarbeiten Sie eine beliebige Anzahl von Fällen in Java List
[Java] Überprüfen Sie die Anzahl der Zeichen
Finden Sie den Unterschied von einem Vielfachen von 10
Suchen Sie in der Liste einen Abschnitt, der die Bedingungen (mehr als die angegebene Anzahl von Malen) kontinuierlich erfüllt (überprüfen Sie die freie Zeit des Konferenzraums).