6
votes

Est-il possible de modifier tous les éléments d'une liste en Java?

J'ai une liste de string s et je souhaite effectuer la même opération sur la totalité de la chaîne S dans la liste.

est-il possible sans effectuer une boucle?


0 commentaires

13 Réponses :


4
votes

Vous pouvez le faire de manière récursive, mais je ne vois pas pourquoi vous voudriez. Vous pourrez peut-être trouver quelque chose de similaire à la fonction de carte de Python (qui, dans les coulisses, seraient une boucle ou une méthode récursive)

Notez également que les chaînes sont immuables - vous devrez donc créer des "copies" de toute façon.


0 commentaires

4
votes

Non. Vous devez faire boucler la liste. xxx


0 commentaires

2
votes

Désolé, vous devez parcourir la liste de la liste et la meilleure façon est dans une boucle.


0 commentaires

9
votes

Eh bien Quelque chose's's's's's's's's's's's's 'est arrivé à la boucle, quelque part - si vous voulez résumer que dans votre propre méthode, vous pourriez le faire, mais je ne crois pas qu'il y ait quelque chose d'introduit dans le cadre.

GUAVA a diverses méthodes dans itérables pour effectuer des projections, etc., mais si vous voulez Modifier la liste à chaque étape, je ne suis pas sûr d'un support pour cela. Encore une fois, vous pouvez écrire votre propre méthode (extrêmement simplement) si vous le souhaitez.

Lorsque Java est finalement des fermetures, ce genre de chose deviendra beaucoup plus raisonnable - pour le moment, en précisant "quelque chose", il est souvent plus d'efforts que cela ne vaut par rapport à la boucle de codage dur, malheureusement.


2 commentaires

Qu'entendez-vous par fermetures dans lorsque Java est finalement fermetures ?


@FOramile: Eh bien, les fermetures existent en Java sous forme de classes anonymes déjà, mais les expressions Lambda à Java 8 leur rendront beaucoup plus agréable. Si vous n'avez aucune idée de la fermeture, il faudrait beaucoup trop de temps à expliquer dans un commentaire - je vous suggère de rechercher sur le Web.



1
votes

Non, vous devez utiliser une boucle pour cela.


0 commentaires

2
votes

Selon ce que vous entendez par aucune boucle, cela peut vous intéresser: une fonction de carte pour Java.

http://www.gubatron.com / Blog / 2010/08/31 / Carte-Function-in-Java /

... Il y a encore une boucle à l'intérieur.


0 commentaires

1
votes

Vous devez effectuer l'opération sur chaque variable de référence aux chaînes de la liste, une boucle est donc nécessaire.

Si c'est au niveau de la liste, il existe évidemment certaines opérations (RemoveAll, etc.).


0 commentaires

2
votes

En Java, vous devrez itération sur les éléments de la collection et appliquer la méthode. Je sais que Groovy offre la * syntaxe de faire cela. Vous pouvez créer une interface pour vos fonctions par exemple. Avec une méthode d'application et écrire une méthode qui prend votre collection et l'interface contenant la fonction à appliquer si vous souhaitez ajouter une API générale pour ce faire cela. Mais vous aurez besoin de l'itération quelque part!


0 commentaires

4
votes

Pourquoi ne voulez-vous pas effectuer une boucle?

Si c'est une complexité informatique, alors non, c'est inévitable. Toutes les méthodes vont essentiellement à ébullition à l'itération de chaque élément de la liste. P>

Si c'est parce que vous voulez quelque chose de nettoyant, la réponse dépend de ce que vous pensez être plus propre. Il y a diverses bibliothèques qui ajoutent une forme de carte fonctionnelle qui se retrouverait avec quelque chose comme: p> xxx pré>

ceci est évidemment plus long ou complexe qu'une boucle simple p >

map(list, new DoSomethingToStringMapper());
map(otherlist, new DoSomethingToStringMapper());


0 commentaires

2
votes

Vous pouvez utiliser Apache Commons Util .


1 commentaires

Le lien est cassé et je ne peux pas comprendre comment formater l'URL correctement pour entrer en réponse. La réponse pointe vers CollectionUtils.foralldo (Java.Util.collection Collection, fermeture de fermeture)



2
votes

Utilisez Diviser et conquérir avec une traversée multithreadée. Assurez-vous de retourner des objets de collecte transformés neufs / immuables (si vous souhaitez éviter les problèmes de concurrence), vous pouvez enfin fusionner (peut-on utiliser un autre fil qui se réveillera après tous les threads de travailleur terminés les tâches de transformateur sur les listes divisées?) . En cas de manque de mémoire dans la création de ces collections intermédiaires, ensuite synchronisez sur votre collection source. C'est le meilleur que vous puissiez faire.


1 commentaires

Lorsque vous donnez des réponses comme celle-ci qui sont abstraites et complexes, un exemple va un long chemin.



0
votes

Réponse acceptée Le lien est brisé et la solution proposée est obsolète:

CollectionUtils :: foralldo

@depecated

Static public > C FORALLDO (ITABLE Collection, C Fermeture C)

obsolète. Depuis 4,1, utilisez iTererUtils.foreach (ibler, fermeture) à la place


Exécute la fermeture donnée sur chaque élément de la collection. Si la collecte d'entrée ou la fermeture est null, il n'y a pas de changement.


Vous pouvez utiliser iTererutils :: foreach (fermeture c)

applique la fermeture à chaque élément du propriétaire fourni.


0 commentaires

1
votes

Le Java API offre une classe spéciale à stocker et à manipuler le groupe d'objets. Une de ces classes est arraylist

Notez que ArrayList est dans Java.Util.ArrayList

Créer une arraylist comme vous le feriez des objets. xxx

ici

  • ArrayList -> Classe

  • Ajay -> Objet

    Vous pouvez éventuellement spécifier une capacité et un type d'objets que la liste conserve: xxx

    La classe ArrayList fournit un numéro de méthodes utiles pour manipuler des objets ..

    La méthode Ajouter () Ajoute de nouveaux objets à l'arraylist.Et Supprimer () Méthode Supprimer les objets du Liste ..

    code d'échantillon: xxx

    sortie pour ce code: xxx


0 commentaires