[JAVA] [Pour les débutants] Exemple simple de fonctions d'opération de liste mapper, réduire, filtrer

Voici quelques opérations simples de map `` `` filter reduction``` qui sont souvent utilisées dans les opérations de liste dans chaque langue. Java est redondant, n'est-ce pas? Ruby et Haskell sont très concis. Cependant, comme j'utilise Java dans mon travail quotidien, je ne connais pas grand-chose aux autres langages, donc Il existe peut-être une manière plus concise de l'écrire.

Voici un exemple simple de.

Faites une liste de nombres

D'ailleurs, il semble qu'il n'est pas souvent fixé d'initialiser la liste dans les affaires. Normalement, les données de liste sont générées par la méthode d'usine et référencées. Cependant, j'effectue parfois l'initialisation suivante en tant que données de test dans les tests.

Java


    List<Integer> xs = Arrays.asList(1, 2, 3, 4, 5);
    //Ou@S'il s'agit de Java 10 ou version ultérieure, comme enseigné par saka1029
    var xs = List.of(1, 2, 3, 4, 5);

    //Il existe également un moyen d'utiliser une telle liste infinie. Ne faites-vous pas cela en affaires?
    //Valeur de départ de l'extérieur, fonction,Vous pouvez le faire en entrant la valeur limite.
    xs = Stream.iterate(1, i -> i + 1).limit(5).collect(toList())

Ruby


    xs = [1, 2, 3, 4, 5]
    #En fait, ce qui précède semble être un mauvais exemple,
    # @Les suivants enseignés par scivola sont bons pour l'initialisation.
    xs = [*1..5]

Python


	xs = [1, 2, 3, 4, 5]

Haskell


    xs = [1, 2, 3, 4, 5]
    --Ou
    xs = [1..5]

Clojure


    (def xs '(1 2 3 4 5))
    ;Ou@Comment Lagenorhynque a commenté
    (def xs (range 1 (inc 5)))

On suppose que cette liste a déjà été créée ci-dessous.

fonction de carte

Prenez une liste et doublez chaque valeur.

Le résultat pour chaque langue est `` [2, 4, 6, 8, 10] ''. La fonction d'impression est omise.

Java


	xs.stream().map(i -> i * 2).collect(toList());

Ruby


	xs.map {|i| i * 2}

Python


	list(map(lambda i: i * 2, xs))
	#Il est peut-être normal d'utiliser la notation d'inclusion de liste en Python pour donner cette réponse.
	[i * 2 for i in xs]

Haskell


	map (*2) xs

Clojure


    (map (fn [n](* n 2)) xs)
    ;Ou@Ce que m'a dit lagenorhynque. Celui-ci est simple et sympa!
    (map #(* % 2) xs)

fonction de filtre

Sélectionnez et renvoyez uniquement un nombre pair.

Le résultat est `` [2, 4] ''.

Java


	xs.stream().filter(n -> n % 2 == 0).collect(toList());

Ruby


	xs.select(&:even?)

Python


	list(filter(lambda n: n % 2 == 0, xs))
	#Ce sera peut-être une notation d'inclusion de liste sans écrire comme ci-dessus.
	[n for n in xs if n % 2 == 0]

Haskell


	filter even xs

Clojure


	(filter even? xs)

réduire la fonction

Les numéros de la liste sont ajoutés, agrégés et renvoyés.

Le résultat est `` 15 ''.

Java


    xs.stream().reduce(Integer::sum).orElse(0);

Ruby



    xs.reduce(:+) 
    #Ou l.inject(:+)
    #Lorsque vous n'utilisez pas, réduisez
    xs.sum

Python n'était pas convivial car il n'y avait aucune importation de @shiracamus, alors je l'ai écrit.

Python


    from functools import reduce
    from operator import add

    reduce(lambda a, b: a + b, xs)
    #Lorsque vous n'utilisez pas, réduisez
    sum(xs)
    #Ou@J'ai appris de shiracamus,
    reduce(add, xs)

Haskell


	foldl (+) 0 xs
	--Lorsque vous n'utilisez pas le pli
	sum xs

Clojure


    (reduce + xs)
    ;@Enseigné par lagenorhynque
    (apply + xs)
    ;Le même résultat peut être obtenu en écrivant. Ce qui est fait en interne(+ 1 2 3 4 5)
    ;réduire est(+ (+ (+ (+ 1 2) 3) 4) 5)

c'est tout.

J'ai écrit pour une langue que j'ai étudiée jusqu'à présent, mais j'ai personnellement écrit Ruby, Clojure, que j'ai trouvé confortable </ b>. Je sens que le sentiment est similaire. (Parce que les deux auteurs aiment lisp?) Haskell est trop terrible et désagréable! Je pense (dans le bon sens) </ b>, mais est-ce amusant! </ B> Ruby, Clojure? Je ne sais pas pourquoi. De plus, Haskell a une façon de penser complètement différente des autres langues, il est donc difficile d'étudier.