Как проверить хешсет для существующего элемента и затем добавить счетчик

Если кто-то получил эту ошибку на веб-сайте WordPress, вам необходимо изменить wp-config db charset:

define('DB_CHARSET', 'utf8mb4_unicode_ci');

вместо:

define('DB_CHARSET', 'utf8mb4');
-2
задан Xiaoren 5 March 2019 в 18:00
поделиться

2 ответа

Из OP я вижу, что вам нужен контейнер значения ключа ассоциации, поэтому наиболее очевидным способом будет использование Map, проверьте, присутствует ли значение в качестве ключа, если нет - добавьте его с помощью 1 counter если есть - добавьте + 1:

void test() {
    Map<String, Integer> summaryReport = new HashMap<>();
    String curDesc = "whatever";

    Integer count = summaryReport.get(curDesc);
    if (count == null) {
        summaryReport.put(curDesc, 1);
    } else {
        summaryReport.put(curDesc, count + 1);
    }
}

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

void test() {
    Map<String, AtomicInteger> summaryReport = new HashMap<>();
    AtomicInteger counter = summaryReport.putIfAbsent("whatever", new AtomicInteger(0));
    if (counter != null) {
        counter.incrementAndGet();
    }
}
0
ответ дан J-Alex 5 March 2019 в 18:00
поделиться

Умным способом решения вашей проблемы было бы использование Java Streams:

final String[] courseDesc = {"Computer Science", "Engineering", "Dentistry", "Architecture", "Computer Science", "Dentistry"};
final int[] courseCount = {15, 20, 10, 11, 25, 7};

Map<String, Integer> summaryReport = IntStream.range(0, courseDesc.length).boxed()
    .collect(Collectors.toMap(
        index -> courseDesc[index], index -> courseCount[index],
        (count0, count1) -> count0 + count1, LinkedHashMap::new
    ));

Это создает карту с курсом в качестве ключа и суммой в качестве значения. Если карта содержит курс и этот же курс собирается снова, лямбда-выражение (count0, count1) -> count0 + count1 обрабатывает его путем суммирования значений. LinkedHashMap::new должен поддерживать порядок.

Теперь вы можете распечатать резюме следующим образом:

summaryReport.forEach((course, count) -> System.out.println(course + " - " + count));

Результат:

Computer Science - 40
Engineering - 20
Dentistry - 17
Architecture - 11
0
ответ дан Samuel Philipp 5 March 2019 в 18:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: