Установить подсчет предметов - PullRequest
0 голосов
/ 29 апреля 2018

Интересно, есть ли в наборе экземпляров java-подсчётов?

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

Например:

Set<Object> counterSet = new Set<Object>();

counterSet.add("Hello");
counterSet.add("world");
counterSet.add("Hello");

counterSet.numberOfInstances("Hello"); //returns 2
counterSet.numberOfInstances("world"); //returns 1

Я искал это, но я не нахожу такую ​​коллекцию, не могли бы вы сказать мне, как лучше всего это сделать?

Ответы [ 3 ]

0 голосов
/ 29 апреля 2018

Вы можете использовать MultiSet из Коллекции Apache Commons .

Определяет коллекцию, которая подсчитывает, сколько раз объект появляется в коллекции. Предположим, у вас есть MultiSet, который содержит {a, a, b, c}. Вызов getCount (Object) для a вернет 2, в то время как вызов uniqueSet () вернет {a, b, c}.

См. Этот пример:

public class MultiSetTest {
    @Test
    public void testMultiSet(){
        MultiSet<String> counterSet = new HashMultiSet<>();
        counterSet.add("Hello");
        counterSet.add("world");
        counterSet.add("Hello");

        Assert.assertEquals(2, counterSet.getCount("Hello"));
        Assert.assertEquals(1, counterSet.getCount("world"));
        Assert.assertEquals(0, counterSet.getCount("somethingMissing"));
    }
}
0 голосов
/ 28 мая 2018

Вы можете использовать Bag type из Eclipse Collections :

Bag<String> bag = Bags.mutable.with("Hello", "world", "Hello");
Assert.assertEquals(2, bag.occurrencesOf("Hello"));
Assert.assertEquals(1, bag.occurrencesOf("world"));

Примечание: я являюсь коммиттером для Eclipse Collections.

0 голосов
/ 29 апреля 2018

Набор не допускает дублирования. Вместо этого рассмотрите использование Map<String, Integer> или List<String>, а затем используйте Collections.frequency, чтобы получить счет.

...