Преобразование строки в картув Ява 8 - PullRequest
0 голосов
/ 20 февраля 2019

Может кто-нибудь подсказать мне, как достичь нижеприведенного уровня с помощью Java 8. Я не знаю , как получить этот счетчик в качестве ключа

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 ]

0 голосов
/ 20 февраля 2019

Есть много решений: некоторые из них будут выглядеть так:

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));

или даже использовать простые forEach

int count =0;
for (Character c:str.toCharArray()) {
  map.putIfAbsent(count++,c);
}
0 голосов
/ 20 февраля 2019

Вы можете сделать это без счетчика как:

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));

Другой способ , кредит @ Хольгер

for(String s: strings) {
     map.put(map.size(), s);
 }
0 голосов
/ 20 февраля 2019

Вы можете написать как

    String str = "abcd";
    Map<Integer, Character> map = IntStream.range(0, str.length()).boxed()
        .collect(Collectors.toMap(Function.identity(), pos -> str.charAt(pos)));

Нет необходимости разбивать строку на String[] strings = str.split(""); Простая однострочная.

0 голосов
/ 20 февраля 2019

Вы можете использовать IntStream, чтобы сделать это.Используйте целочисленное значение в качестве ключа, а соответствующее значение в строковом массиве с этим индексом в качестве значения карты.

Map<Integer, String> counterToStr = IntStream.range(0, strings.length)
    .boxed()
    .collect(Collectors.toMap(Function.identity(), i -> strings[i]));

Другой альтернативой, которая устраняет необходимость split, будет

Map<Integer, String> counterToStr = IntStream.range(0, strings.length)
    .boxed()
    .collect(Collectors.toMap(Function.identity(), i -> str.charAt(i) + "")); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...