Если вы открыты для использования сторонней библиотеки, вы можете использовать GS Collections, который поддерживает примитивные сумки. Bag - это структура данных, которая отслеживает появление каждого уникального элемента. Использование IntBag может уменьшить количество бокса, которое вам в противном случае понадобилось бы для вашего случая использования.
CharAdapter remove = CharAdapter.adapt("[]");
IntBag counts =
Lists.mutable.with("[1,2]", "[1,4]", "[4]", "[3,5]")
.asLazy()
.collectWith(StringIterate::rejectChar, remove::contains)
.flatCollect(StringIterate::csvTokensToList)
.collectInt(Integer::parseInt)
.toBag();
Assert.assertEquals(2, counts.occurrencesOf(1));
Assert.assertEquals(1, counts.occurrencesOf(2));
Если вам нужен вывод отсортированных по значению, вы можете использовать вместо SortedBag<Integer>
. Обратите внимание, однако, это приведет к боксу ints к целым.
CharAdapter remove = CharAdapter.adapt("[]");
SortedBag<Integer> counts =
Lists.mutable.with("[1,2]", "[1,4]", "[4]", "[3,5]")
.asLazy()
.collectWith(StringIterate::rejectChar, remove::contains)
.flatCollect(StringIterate::csvTokensToList)
.collect(Integer::parseInt)
.toSortedBag();
Assert.assertEquals(2, counts.occurrencesOf(1));
Assert.assertEquals(1, counts.occurrencesOf(2));
System.out.println(counts.toStringOfItemToCount());
Выходы:
{1=2, 2=1, 3=1, 4=2, 5=1}
Примечание: Я являюсь разработчиком на GS Коллекции
Пожалуйста, задать четкий вопрос. Покажите свой код. Укажите пример ввода + ожидаемый вывод. – Manu
извлеките номер из строки «String» и используйте «Map», чтобы подсчитать вероятность появления каждого из этих чисел. – SomeJavaGuy
, если диапазон этих чисел мал, вы можете даже использовать массив, индексом которого является число, а данные - это количество этого числа. В противном случае вы можете использовать HashMap – VicX