Как заменить функцию get() на computeIfAbsent() в Map?

#java #hashmap #sonarcloud

#java #хэш — карта #sonarcloud

Вопрос:

в результате анализа Sonarcloud было предложено, чтобы я использовал метод computeIfAbsent() вместо get() для слушателей, который определяется как Map<Строка, список>. Поскольку я не знаком с этим методом, кто-нибудь знает, как правильно реорганизовать метод, указанный в следующем Java-коде, чтобы правильно использовать computeIfAbsent() вместо get() ?

 public void addListener(String event, EventListener listener) {
    List<EventListener> eventListeners = listeners.get(event);
    if (eventListeners == null) {
        eventListeners = new ArrayList<>();
        listeners.put(event, eventListeners);
    }
    eventListeners.add(listener);
}
 

Комментарии:

1. «Поскольку я не знаком с этим методом» — вы читали документ?

2. @Eugene Да, но мне не удалось адаптировать примеры к заданному контексту.

3. покажите, что вы сделали тогда, и с какой конкретной проблемой вы столкнулись

4. listeners.computeIfAbsent(event, ignoreMe -> new ArrayList<>()).add(event);

5. я не понял, нужно ли мне заменить все тело метода тем, что вы написали, или просто заменить метод get() . мне удалось получить список<EventListener> EventListeners = listeners.computeIfAbsent(событие, k-> новый список массивов<>());

Ответ №1:

Это то, что вам нужно?

 listeners.computeIfAbsent(event, ignoreMe -> new ArrayList<>()).add(listener);