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?
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.
Le fractionnement d'expressions régulières est ce que vous recherchez
Stream.of(ints.split(", "))
.map(Integer::parseInt)
.collect(Collectors.toList());
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.
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]