Добавить алфавит в список с указанием c количество - PullRequest
1 голос
/ 11 апреля 2020

Этот вопрос является продолжением моего предыдущего вопроса

Итак, я хочу создать список с предположением 5 a символов, 10 b, 20 c и 10 d.

for(char chr = 'a'; chr <= 'c'; chr++){
    alphabetList.addAll(Collections.nCopies(5, chr));
}

С помощью приведенного выше кода я могу добавить 5 копий каждого символа. У меня вопрос, как мы можем добавить 5 a символов, 10 b, 20 c и 10 d. Как мы можем это сделать. Любой функциональный способ?

Ответы [ 3 ]

2 голосов
/ 11 апреля 2020

Вы можете создать LinkedHashMap (для сохранения порядка) символов и счетчиков, а затем выполнить итерацию по нему и вызвать nCopies:

Map<Character, Integer> numCopies = new LinkedHashMap<>();
numCopies.put('a', 5);
numCopies.put('b', 10);
numCopies.put('c', 20);
numCopies.put('d', 10);

for (Map.Entry<Character, Integer> e : numCopies) {
    alphabetList.addAll(Collections.nCopies(e.getVale(), e.getKey());
}
1 голос
/ 11 апреля 2020

Вы можете определить карту и заполнить ее известными значениями, а именно символами и числом ее повторений.

Map<Character, Integer> map = new HashMap<>();

{
  map.put('a', 5);
  map.put('b', 10);
  map.put('c', 20);
  map.put('d', 10);
}

И затем использовать ее следующим образом:

for(char chr = 'a'; chr <= 'c'; chr++){
    alphabetList.addAll(Collections.nCopies(map.get(chr), chr));
}
1 голос
/ 11 апреля 2020

Просто используйте массив, чтобы сохранить частоту повторения каждого символа:

int[] charCount={5,10,20,10};

for(char chr = 'a',int i=0; chr <= 'd'&&i<charCount.length; chr++,i++){
    alphabetList.addAll(Collections.nCopies(charCount[i], chr));
}

Я также добавил переменную-счетчик i, которая указывает позицию в массиве.

Затем вы можете просто использовать массив по этому индексу, чтобы узнать, как часто вы хотите повторить символ.

Чтобы предотвратить ArrayIndexOutOfNoundsExceptions (если массив слишком мал), я добавил проверку, что в этом случае l oop прерывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...