web-dev-qa-db-fra.com

Java 8 convertit la chaîne de caractères en liste <Integer>

J'ai une chaîne:

String ints = "1, 2, 3";

Je voudrais le convertir en une liste d'ints:

List<Integer> intList

Je peux le convertir en une liste de chaînes de cette façon:

List<String> list = Stream.of("1, 2, 3").collect(Collectors.toList());

Mais pas à la liste des ints.

Des idées?

13
Igor

Vous devez diviser la chaîne et créer un flux à partir de chaque partie. La méthode splitAsStream(input) fait exactement cela:

Pattern pattern = Pattern.compile(", ");
List<Integer> list = pattern.splitAsStream(ints)
                            .map(Integer::valueOf)
                            .collect(Collectors.toList());

Il renvoie un Stream<String> de la partie de la chaîne d'entrée, que vous pourrez ensuite mapper à un Integer et rassembler dans une liste.

Notez que vous souhaiterez peut-être stocker le motif dans une constante et le réutiliser chaque fois qu'il sera nécessaire.

23
Tunaki

Le fractionnement d'expressions régulières est ce que vous recherchez

Stream.of(ints.split(", "))
      .map(Integer::parseInt)
      .collect(Collectors.toList());
18
Lukas Eder

Vous pouvez simplement utiliser la fonction Array asList, puis la convertir de la manière Java8.

N'oubliez pas de supprimer les espaces blancs.

 List<Integer> erg = Arrays.asList(ints.replace(" ", "").split(",")).stream().map(Integer::parseInt).collect(Collectors.toList());

EDIT: Désolé, je n'ai pas vu qu'il s'agissait d'une seule chaîne, je pensais que c'était un tableau de chaînes.

2
tl-photography.at

Tout d'abord, divisez la chaîne en nombres individuels, puis convertissez-les (chaîne fixe) en entiers réels, et enfin collectez-les dans une liste. Vous pouvez faire tout cela en enchaînant les opérations de flux.

String ints = "1, 2, 3";
List<Integer> intList = Stream
        .of(ints.split(", "))
        .map(Integer::valueOf)
        .collect(Collectors.toList());
System.out.println(intList);  // [1, 2, 3]
2
tobias_k