Java 8 flux sur les tableaux de chaînes
J'ai une seule Chaîne de format:
row1col1 row1col2
row2col1 row2col2
row3col1 row3col2
et ainsi de suite...
Je veux extraire de chaque élément et de construire un tableau d'objets avec des propriétés comme ceci:
new MyObject(row1col1, row1col2);
Je suis nouveau sur Java 8 et les Ruisseaux, et je voudrais savoir comment puis-je obtenir sans boucles.
Normalement, je voudrais utiliser une String.split('\n')
pour l'accumulation de la lignes dans un tableau de String
Et puis une boucle où pour chaque ligne je voudrais diviser à nouveau sur l'espace comme séparateur et avec la matrice résultante de deux éléments (row1col1 row1col2
) construire mon objet, jusqu'à ce qu'il n'y a plus de lignes à traiter.
Comme ceci:
String sausage = "row1col1 row1col2\nrow2col1 row2col2\nrow3col1 row3col2";
String[] rows = sausage.split("\n");
for (String row : rows) {
String[] objectData = u.split("\\s+");
MyObject myObject = new MyObject(objectData[0], objectData[1]);
myObjectList.add(myObject);
}
Quelqu'un peut-il m'expliquer comment réaliser la même chose avec des ruisseaux et quel est le mécanisme derrière qui me permet de le faire?
Est-ce encore un moyen valable de penser lorsque l'on augmente le nombre d'éléments, car, de tous les exemples que j'ai vu le flux focus sur le filtrage, la collecte ou, généralement, étant donné un ensemble d'éléments de récupérer un mineur mis en appliquant certains critères.
source d'informationauteur Lucian Enache
Vous devez vous connecter pour publier un commentaire.
Un moyen simple serait de créer un
Pattern
avec le séparateur de ligne et de diviser l'entréeString
comme unStream
. Ensuite, chaque ligne est divisée par un espace (en ne gardant que 2 parties) et associée à unMyObject
. Enfin, un tableau est construit avec le résultat.À l'aide de
splitAsStream
peut être plus avantageux que lesStream.of(...)
si l'entréeString
est longue.J'ai supposé que dans le code que le séparateur de ligne de la
String
était le défaut de séparateur de ligne (System.lineSeparator()
) de l'OS, mais vous pouvez le changer si il ne l'est pas.Au lieu de cela, si vous lisez à partir d'un fichier, vous pouvez utiliser
Files.lines()
pour obtenir une prise d'unStream
de toutes les lignes dans le fichier:Vous pouvez générer un
Stream
deString
s qui représentent un seulMyObject
exemple, et de transformer chacun d'eux à votreMyObject
instance (par premier de les diviser à nouveau, puis la construction d'unMyObject
exemple) :