66 votes

Java flux toArray() de convertir un type spécifique de tableau

C'est peut-être très simple, mais en réalité je suis un noob sur Java 8 fonctionnalités et ne savez pas comment faire cela. J'ai cette simple ligne qui contient le texte suivant:

"La Clé, Le Nom De"

et je veux les convertir ligne dans un tableau de chaînes, en séparant chaque valeur par la virgule (,), cependant, j'ai aussi envie de couper tous les champs avant de retourner le tableau final, j'ai donc fait la suivante:

Arrays.stream(line.split(",")).map(String::trim).toArray();

Cependant, celle-ci retourne un Objet tableau[] plutôt que d'un String[] tableau. Après une inspection plus poussée, je peux confirmer que le contenu sont en fait des instances de Chaîne, mais le tableau lui-même est de l'Objet des éléments. Permettez-moi d'illustrer cela, c'est ce que le débogueur dit de l'objet retourné:

Object[]:
    0 = (String) "Key"
    1 = (String) "Name"

Aussi loin que je peux dire, le problème est dans le type de retour de la carte d'appel, mais comment puis-je faire pour retourner une String[] tableau?

112voto

Mritunjay Points 18212

Utiliser toArray(size -> new String[size]) ou toArray(String[]::new).

String[] strings = Arrays.stream(line.split(",")).map(String::trim).toArray(String[]::new);

C'est en fait une expression lambda pour

.toArray(new IntFunction<String[]>() {
        @Override
        public String[] apply(int size) {
            return new String[size];
        }
    });

Lorsque vous dites à convertir le tableau en tableau de Chaîne de la même taille.

À partir de la docs

Le générateur de fonction prend un nombre entier, ce qui est la taille du tableau désiré, et produit un tableau de la taille désirée. Cela peut être exprimé de manière concise avec un tableau constructeur de référence:

 Person[] men = people.stream()
                      .filter(p -> p.getGender() == MALE)
                      .toArray(Person[]::new);

Les Paramètres De Type:

A - le type d'élément du tableau résultant

Paramètres:

générateur - une fonction qui produit un nouveau tableau du type désiré, et la condition de la longueur

4voto

Paul Buis Points 621

String[]::new est une fonction qui appelle l' new "pseudo-méthode" pour l' String[] type comme String::trim est une fonction qui appelle le réel trim méthode de type Chaîne de caractères. La valeur passée à l' String::new fonction par toArray est la taille de la collection, sur le côté droit de la .toArray() invocation de méthode.

Si vous avez remplacé String[]::new avec n->new String[n] vous pourriez être plus à l'aise avec la syntaxe comme vous pouvez le remplacer String::trim avec le moins de frais s->s.trim()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X