[PYTHON] Comparez comment écrire le traitement des listes par langue

Que se passerait-il si je continuais à toucher java7 tout le temps et que j'écrivais soudainement ce processus dans une autre langue? J'ai pensé, alors je vais y réfléchir un instant. C'est pourquoi j'ai pensé au traitement des tableaux, qui est courant dans les applications Web.

Exigences

↓ Réduisez la liste des json ou de la carte à l'âge> 25, puis triez par âge dans l'ordre croissant

[
  {"age":25, "name": "adam"},
  {"age":60, "name": "adamo"},
  {"age":30, "name": "larry"}
]

Cas 1: Python (2.7)

En python, les fonctions d'ordre supérieur sont définies par des fonctions intégrées, de sorte qu'au fur et à mesure que vous écrivez, l'imbrication devient progressivement plus profonde. Pour cette raison, il est difficile de comprendre quel type de traitement de tableau est effectué pour quoi, même avec une telle source.


users= [
  {"name":"adam","age":25},
  {"name":"adamo","age":60},
  {"name":"larry","age":30}
]

sorted(
  filter(lambda a: a['age']>25,
    users
  ),
  key=lambda a:a['age']
)

Cas 2: Python (2.7) Autre approche

Le curry est réalisé en utilisant partiel et une chaîne de méthodes est réalisée en utilisant la réduction. Il ne semble pas que cela va sortir seul, mais il peut être préférable que l'évaluation puisse être reportée en renvoyant une méthode comme xrange.

from functools import partial
def chain(*args):
   return reduce(lambda x,f:f(x), args)

filter25 = partial(filter, lambda a: a['age']>25)
sortbyage = partial(sorted, key=lambda a:a['age'])

users=[
  {"name":"adam","age":25},
  {"name":"adamo","age":60},
  {"name":"larry","age":30}
]
chain(
  users,
  filter25,
  sortbyage
)

Cas 3: scala

Facile.

val users: List[Map[Symbol,String]] = List(
  Map('age->"25", 'name->"adam"),
  Map('age->"60", 'name->"adamo"),
  Map('age->"30", 'name->"larry")
)
users.filter(n => n.get('age).get.toInt > 25)
.sortBy(_.get('age).get)

Si vous gardez la carte, elle manque de sécurité. Je pense que c'est une bonne idée de le remettre dans le tableau de classe au début ou de le mapper au milieu.

//Motif à changer depuis le début
val users: List[Person] = List(
  new Person(25, "adam"),
  new Person(60,"adamo"),
  new Person(30,"larry")
)
users.filter(n => n.age > 25)
.sortBy(_.age)
//Motif à changer en cours de route
val users: List[Map[Symbol,String]] = List(
  Map('age->"25", 'name->"adam"),
  Map('age->"60", 'name->"adamo"),
  Map('age->"30", 'name->"larry")
)
users.map(n => new Person(n('age).toInt, n('name)))
.filter(n => n.age > 25)
.sortBy(_.age)

Cas 4: java7 avec goyave:

En fait, il y avait une personne qui a écrit une telle source. C'est un peu plus facile à comprendre si vous avez des connaissances sur la goyave ... Je l'ai écrit correctement, donc quand je l'ai remarqué, j'ai utilisé la classe. La requête est différente de celle de python.

List<Map<String, String>> users = ImmutableList.of<Map<String, String>>(
        ImmutableMap.of("name", "adam", "age", "25"),
        ImmutableMap.of("name", "adamo", "age", "60"),
        ImmutableMap.of("name", "larry", "age", "30")
);
FluentIterable
.from(users)
.transform(new Function<Map<String, String>, Person>(){
    @Override
    public Person apply(Map<String,String> map){
        return new Person(map.get("name"), new Integer(map.get("age")));
    }
})
.filter(new Predicate<Person>(){
    @Override
    public boolean apply(Person person){
        return person.age > 25;
    }
})
.toSortedImmutableList(Ordering.natural().onResultOf(
    new Function<Person, Integer>(){
        @Override
        public Integer apply(Person person){
            return person.age;
        }
    })
);

Cas 5: java8

Il est indéniable que la partie de tri est un peu démodée. La définition des premières données est assez ennuyeuse. Quel est le meilleur moyen?

List users = Collections.unmodifiableList(Arrays.asList(
    new HashMap<String, String>(){{put("age","25");put("name","adam");};},
    new HashMap<String, String>(){{put("age","60");put("name","adamo");};},
    new HashMap<String, String>(){{put("age","30");put("name","larry");};}
    )
);
users.stream()
.filter(a -> new Integer(a.get("age")) > 25)
.sorted((o1, o2) -> new Integer(o1.get("age")).compareTo(new Integer(o2.get("age"))))
.collect(Collectors.toList());

Quand je l'ai stocké dans un objet en cours de route, c'est devenu assez simple.

List users= Collections.unmodifiableList(Arrays.asList(
    new HashMap<String, String>(){{put("age","25");put("name","adam");};},
    new HashMap<String, String>(){{put("age","60");put("name","adamo");};},
    new HashMap<String, String>(){{put("age","30");put("name","larry");};}
    )
)
users.stream()
.map(a -> new Person(new Integer(a.get("age")), a.get("name")))
.filter(a -> a.age > 25)
.sorted(comparing(Person::getAge))
.collect(Collectors.toList());

Ochi

Que s'est-il passé parce que je n'ai vu qu'une chose aussi étroite? C'est comme ça, mais au moins j'ai pensé qu'il serait préférable de jeter java7 et de passer à java8.

Je ne l'ai pas écrit cette fois, mais comme c'est java7, si je procède normalement avec un type procédural, même avec ce genre de traitement de tableau, j'ai l'impression que je ne peux rien dire car le code avec des effets secondaires est écrit comme "J'écrirai ici aussi", donc le flux de java8 Il est très intéressant de pouvoir créer des conventions de code avec API.

Recommended Posts

Comparez comment écrire le traitement des listes par langue
Comment rédiger un test de traitement utilisant BigQuery
Comment écrire une instruction ShellScript Bash for
[Introduction à Python] Comment écrire des instructions répétitives à l'aide d'instructions for
[Traitement du langage naturel / PNL] Comment effectuer facilement une traduction arrière par traduction automatique avec Python
XPath Basics (2) - Comment écrire XPath
Comment réparer les multi-colonnes générées par le groupe Pandas en les traitant en single
[Python] Essayez de classer les boutiques de ramen par traitement du langage naturel
Comparaison de la vitesse de traitement de la pile par langue
[Pour les non-programmeurs] Comment marcher Kaggle
Comment comparer des listes et récupérer des éléments communs dans une liste
Comment écrire sobrement avec des pandas
Traitement du langage naturel pour les personnes occupées
Réutilisation du flacon Comment écrire du HTML
Par langue: expressions régulières pour les mots de passe
Comment utiliser lentement le langage informatique 2
Articles en vrac pour ceux qui veulent commencer le traitement du langage naturel
100 langues de traitement frappent 2020 "pour Google Colaboratory"
Comment écrire une image de base Docker
Résumez comment prétraiter le texte (traitement du langage naturel) avec l'api tf.data.Dataset
Comment écrire un fichier wsgi.py indépendant de l'environnement Django1.9
Comment utiliser lentement le langage informatique
100 Language Processing Knock Chapitre 1 par Python
Se préparer à démarrer le traitement du langage naturel
Remarques sur la rédaction de requirements.txt
Comment séparer le code de traitement du pipeline par spider avec Scrapy
3. Traitement du langage naturel avec Python 1-2. Comment créer un corpus: Aozora Bunko
Comment comparer des données de séries chronologiques - Dérivée DTW, DTW-
Qiita (1) Comment écrire un nom de code
Comment définir optuna (comment écrire un espace de recherche)
100 Language Processing Knock-89: Analogie avec la constitution additive
Comment créer un fichier * .spec pour pyinstaller.
Comment écrire des commentaires de document Python (Docstrings)
[Python] Organisation de l'utilisation des instructions
Décidez pour qui voter par loterie
Comment installer le sous-système Windows pour Linux
Comment utiliser l'authentification par empreinte digitale pour KDE
Comment écrire Ruby to_s en Python
Résumé de l'écriture d'AWS Lambda
Comment écrire des commentaires pydoc et multi-lignes
Entrée où les débutants en Python font de leur mieux pour frapper petit à petit 100 processus de langage
Comment écrire un test unitaire pour l'extraction d'URL dans GAE / P
[python] Comment afficher les éléments de la liste côte à côte
J'ai essayé de programmer la bulle de tri par langue
Une introduction à la programmation orientée objet pour les débutants par les débutants
Comment utiliser MkDocs pour la première fois
Comment convertir M4a acquis par iTunes en wav
Comment créer un plug-in Spigot (pour les débutants Java)
Une personne inexpérimentée en Python essaie de frapper 100 traitement du langage 14-16
Comment implémenter le traitement du temps d'attente avec wxpython
Méthode de contrôle exclusive multi-processus en langage C
[Django] Comment obtenir des données en spécifiant SQL.
Comment installer Python pour les chercheurs de sociétés pharmaceutiques
Comment utiliser les outils d'analyse de données pour les débutants
Réponse à "Comment écrire un problème F01 en temps réel hors ligne"
Comment effacer les caractères générés par Python