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