Quelqu'un peut-il me guider sur la façon de réaliser les objectifs ci-dessous en utilisant Java 8. Je ne sais pas comment obtenir ce compteur comme clé
String str = "abcd"; Map<Integer,String> map = new HashMap<>(); String[] strings = str.split(""); int count =0; for(String s:strings){ map.put(count++, s);// I want the counter as the key }
4 Réponses :
Vous pouvez utiliser IntStream
pour effectuer cette opération. Utilisez la valeur entière comme clé et la valeur appropriée dans le tableau de chaînes à cet index comme valeur de la carte.
Map<Integer, String> counterToStr = IntStream.range(0, strings.length) .boxed() .collect(Collectors.toMap(Function.identity(), i -> str.charAt(i) + ""));
Une autre alternative qui évite le besoin de fractionner code> serait,
Map<Integer, String> counterToStr = IntStream.range(0, strings.length) .boxed() .collect(Collectors.toMap(Function.identity(), i -> strings[i]));
Vous pouvez le faire sans le compteur comme:
for(String s: strings) { map.put(map.size(), s); }
Une autre façon de contourner , crédit @ Holger
String str = "abcd"; Map<Integer,String> map = new HashMap<>(); String[] strings = str.split(""); for(int i=0;i<strings.length;i++) { map.put(i, strings[i]); } map.forEach((k,v)->System.out.println(k+" "+v));
ou pour (String s: strings) map.put (map.size (), s);
@Holger, ouais ça marchera, je l'ai ajouté à la réponse.
Vous pouvez écrire comme
String str = "abcd"; Map<Integer, Character> map = IntStream.range(0, str.length()).boxed() .collect(Collectors.toMap(Function.identity(), pos -> str.charAt(pos)));
Pas besoin de diviser la chaîne avec String [] strings = str.split ("");
Un simple one-liner .
Il existe de nombreuses solutions: certaines d'entre elles seraient comme ceci:
int count =0; for (Character c:str.toCharArray()) { map.putIfAbsent(count++,c); }
ou même utiliser un simple forEach
Map<Integer,Character> map = new HashMap<>(); AtomicInteger atomicInteger = new AtomicInteger(0); map = str.chars() .mapToObj(i->new AbstractMap.SimpleEntry<>(atomicInteger.getAndAdd(1),(char)i)) .collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue));
Copie possible de Java 8: Comment convertir une chaîne en carte?
Vous recherchez de préférence une
Map
accédant qui est à nouveau principalement accessible viaString.charAt
. Quel est le cas d'utilisation de la création de cette carte si vous pouviez partager les détails?